安装
Releases · tporadowski/redis · GitHub
直接去选择msi格式的,窗口式的安装,一步一步。
安装过程中有一个选项是问你需不需要配置到环境变量中,选上这个选项,不选的话,需要自己去配环境变量。
检查是否安装配置成功:
在cmd 中输入
redis-cli
默认有15个数据库,默认在第0个,可以用select切换数据库。
介绍
Redis:是用C语言开发的Key-Value类型的NoSQL数据库,整个数据库加载在内存当中操作,定期通过异步操作把数据库中的数据flush到硬盘.上进行保存。
NoSQL数据库:就是除去Mysql这种关系型数据库之外的数据库的通常。
redis存的全是字符串
在Redis中,数据存储的时候是以字符串形式存储的,而不会区分数据是数字还是字符串。Redis是一个无模式数据库,它将所有数据都视为二进制字符串。这意味着 Redis 存储的任何内容都是字符串,而 Redis 本身不会对数据类型进行检查。
既然存的全是字符串,那为什么有的数据还能自增自减?
Redis 中之所以能够执行自增(INCR)和自减(DECR)操作,尽管数据存储的全是字符串,是因为 Redis 实际上并不是将所有字符串都当作普通字符串对待。Redis 在内部会根据字符串的内容来判断其是否可以被解释为整数。
具体来说,当你执行自增和自减操作时,Redis会检查键的值是否满足以下条件:
- 键的值必须是一个有效的整数字符串。
- 键的值必须在 Redis 可以表示的整数范围内。
如果键的值满足这两个条件,Redis 就会将其解释为整数,并执行自增或自减操作。否则,Redis 将返回一个错误,指示键的值不能解释为整数。
优点
- 性能好,访问快
- 支持的数据类型完善
- 支持持久化、支持分布式
缺点
- 内存限制: 由于数据存储在内存中,Redis的数据量受到物理内存的限制。如果数据集太大,可能会导致内存不足的问题。
- 单线程模型:Redis在单个线程中执行命令,这意味着在处理大量客户端请求时,性能可能会受到限制。
适用场景
- 缓存:最常用的一个就是作为缓存层, 将频繁访问的数据存储在内存中, 减轻数据库、服务器的负担,加快访问速度。
- 排行榜:热门帖子放到缓存中,访问频率高
- 计数器:这个东西访问频率特别高,每个用户点击一下就计数+1,放内存里比较好
- 点赞、关注、评论:这些访问频率高的操作
- 消息队列:可以做这个 轻量级的消息队列系统, 用于处理实时事件和任务队列。
Redis为什么快?
- 内存存储:Redis将数据存储在内存中,而不是传统的磁盘存储。内存存储意味着数据可以直接从RAM中读取,而无需磁盘I/O操作,这使得读取和写入操作非常快速。
- 单线程:Redis采用单线程模型来处理命令请求,它不需要进行多线程之间的锁定和同步操作。每个请求都是按顺序处理的,这可以减少竞争和上下文切换,提高性能。
- 数据结构优化:Redis支持多种高性能数据结构,例如哈希表和有序集合,这些数据结构经过精心设计和优化,以在内存中快速执行操作。这些数据结构使Redis非常适合各种用例,如计数器、排行榜和消息队列。
数据类型、命令
存储的数据类型:key,value形式存储的 key值是String类型的 value值是下面五种形式。
常用的是5种类型,还有其他的类型,例如位图、超级日志等类型。
(列表可重复,集合不可重复)
- 字符串类型就是:key值: value1,相当于一个字符串
- 哈希类型就是:key值: key1:value1,key2:value2,key3:value3,相当于 键值对集合
- 列表就是:key值: value1,value2,value3,相当于 字符串列表
- 集合、有序集合就是:key值: value1,value2,value3,相当于 字符串集合
所有类型通用操作
启动: redis-cli
数据库转换:select 11(0-15共16个数据库)
查询所有的key: keys *
查询所有key以test开头的:keys test*
查看某个key的类型:type key值
清空所有库里面的数据 (谨慎使用:flushall
删除某个key: del key值
判断值是否存在:exists key值1,key值2...
查看剩余的时间:ttl key值
或者直接设置过期时间:expire key值 秒数
1.String字符串
set:格式:set key值 value1 ex 秒数 后面这是设置的过期时间
获取value:get key值
获取值的长度:strlen key值
值自减:decr key值(必须是数字)
值自增:incr key值(必须是数字)
2.hash哈希集合
key不可重复:哈希集合key值的每个键值对中的小key不能重复,但是value可以重复
存储:hset key值 key值(小) value值(小)
同时设置多个小key小value: hmset key值 key值(小) value值(小) key值(小) value值(小)....
取值:hget key值 key值(小)
举例:
#存了一个key是user:1的哈希集合,集合里面存了一个键值对 name:Alice
hset user:1 name "Alice"
#取出name的值
hget user:1 name
取所有值: hgetall key值
看是否存在:hexists key值 key值(小)
获取集合全部的key:hkeys key值
获取集合全部的value:hvals key值
3.list列表
有序可重复
像一个水平的矩形,可以从左右两边加数据、减数据
从左边开始存数据 lpush key值 value1 value2 value3 value4 value5 ..
存进去就是:value5 value4 value3 value2 value1
从右边开始存数据 rpush key值 value1 value2 value3 value4 value5 ..
存进去就是:value1 value2 value3 value4 value5
从左边获取并删除数据:lpop key值
从右边获取并删除数据:rpop key值
获取某个下标的数据:lindex key值 index值
查看长度:llen key值
查看下标从0-2的数据:lrange key值 0 2
4.set集合
类似hashset 无序不可重复
存数据: sadd key值 value1 value2 value3...
删数据:srem key值 value1
随机获取并删除数据:spop key值 数量 (随机去数据可以用来抽奖)
获取所有成员:smembers key值
获取成员个数:scard key值
并集操作:suntion key值1 key值2
交集操作:sinter key值1 key值2
5.zset有序集合
有序且不重复
它是按照分数排序。
每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。
zset的成员(value)是唯一的,但分数(score)却可以重复。
添加:zadd key score1 value1 [score2 value2 ...] (若存在更新分数)
删除: zrem key value1 [value2 ...]
获取分数:zscore key value1
获取元素个数:zscore key
加分减分:zincrby key 加几分(数字) value1(可以为负数来减少分数)
获取排名:zrank key value1 (下标从0开始)
获取倒序排名 zrevrank key value1
范围获取:zrange key 起始下标 终止下标 [withscores](加withscores会同时输出分数)
不排序范围获取:zrevrange key 起始下标 终止下标 [withscores]
如果觉得文章还不错,麻烦点个赞吧