一、常用的key操作命令
keys *
查看当前数据库的键值
ttl key
查看还有多少秒过期,-1表示永不过期,-2表示过期
del / unlink key
同样是删除,unlink是非阻塞删除,del则有可能导致阻塞
select dbindex
切换数据库
flushdb
清空当前库
二、字符串
keepttl
使用set key value
导致键值的过期时间被刷新的问题,在这里使用keepttl
即可保证键值在被重新赋值的时候不会被刷新过期时间。
mset/mget/msetnx
多值操作,mset一次性设置多个值,mget一次性获取多个值,msetnx只有在n个键都没有设置值的时候才会设置值。
mset k1 v1 k2 v2 k3 v3
mget k1 k2 k3
msetnx k1 v1 k4 v4
getrange/setrange
set k1 abcd1234
GETRANGE k1 0 3
得到结果"abcd"
SETRANGE k1 1 xxyy
get k1
得到结果"axxyy234"
数值增减
INCR key // val + 1
INCRBY key x // val + x
DECR key // val - 1
DECRBY key x // val - x
setnx key value
setex(set with expire) / setnx(set if not exists)
三、链表
redis链表底层是一个双端链表,对两端操作性能高,通过索引下表操作中间节点性能较低。
lpush / rpush / lrange
左端插入 \ 右端插入 \ 从左到右遍历lpop / rpop
左端弹出 \ 右端弹出lindex / llen
从左往右第index个元素 \ 列表中元素个数lrem key n v1
删除n
个值等于v1
的元素ltrim key sindex eindex
截取下表sindex
到eindex
的元素赋值给key
rpoplpush 列表1 列表2
从列表1的右端弹出的元素从左端进入列表2lset key index value
已有值,设置该列表的index
为value
linsert key before / after
已经存在值,插入新值
四、哈希
此时的value
也是一个key-value
hset/hget/hmset/hmget/hgetall/hdel
hlen
获取某个key内的全部哈希对数量hexists key
在key里面的某个值的key是否存在hkeys/hvals
key里面所有哈希对的键/key里面所有哈希对的值hsetnx
不存在赋值,存在了无效
五、集合
单值多value,并且无重复
sadd/srem key member
添加/删除元素smembers
遍历集合中的所有元素sismember key member
判断元素是否在集合中sdiff/sunion/sinter
集合运算 减/并/交
六、有序集合
有序集合是在集合的基础上,每个val值前面加上了score分数
set ---> k1 v1 v2 v3
zset---> k1 score1 v1 score2 v2
zadd key score member
添加元素zrange key start stop
从start位置到stop位置遍历元素。zrangebyscore key min max
获取指定分数范围的元素zscore key member
获取元素的分数zrem key value
删除对应value值的score
七、位图
setbit key offset value
设置key
对应value
的第offset
位为value
,offset
从0开始算,value
是1或者0gitbit key offset
获取key
对应value
第offset
位的值strlen
统计字节数占多少bitcount
全部键里面含有1的个数
八、基数统计
HyperLogLog是用来做基数统计的算法。其优点是,在输入元素数量或者体积非常大时,计算基数所需的空间总量是固定且非常小的。基础用法主要是去重
pfadd key value
添加指定元素到HyperLogLog中pfcount key
返回HyperLogLog的估算值pfmerge destkey sourcekey
将多个HyperLogLog合并为一个HyperLogLog
九、地理空间
GEOADD key longitude latitude member
添加经纬度坐标GEOHASH key member
使用geohash保存返回坐标GEODIST key member1 member2
计算两个点的距离GEORADIUS
以给定的经纬度为中心,求半径范围内的元素GEORADIUSMEMBER
找出位于指定范围内的元素,中心点由给定的位置元素决定
十、流
Reids消息队列的实现方式有:
- List实现消息队列,支持了一对一的消息传输,但是一对多的消息传输却力不从心。
- Redis发布订阅(pub/sub)缺点在于消息无法持久化,如果没有消费者,消息就会直接被丢弃。
所以,在Redis5.0出现了Stream用来支持消息队列。Stream实现了消息队列,支持消息的持久化、支持自动生成全局唯一ID、支持ack确认消息的模式、支持消费组模式等,让消息队列更加稳定可靠。
10.1消息队列的结构
名词 | 解释 |
---|---|
Message Content | 消息内容 |
Consumer group | 消费组,一个消费组有多个消费者 |
Last_delivered_id | 游标,消费组中的消费者读取消息后会使游标前移 |
Consumer | 消费者 |
pending_ids | 记录被当前消费组已读但未ack的消息Id,用来确保客户端至少消费了消息一次,但不会在网络传输的中途丢失了。 |
10.2 队列相关命令
XADD
添加消息到队列末尾,*
表示自动生成idXRANGE start end count
获取消息队列,start表示开始(-表示最小值),end表示结束(+表示最大值),count表示最多获得多少个值。XREVRANGE end start count
反向获取消息队列XDEL
删除消息XLEN
获取消息队列的消息长度XTRIM
对stream长度进行截取XREAD
用于获取消息,返回大于指定ID的消息,可以设置是否以阻塞的方式读取
10.3 消费组相关命令
XGROUP CREATE
用于创建消费者组,命令末尾带$
表示从尾部开始消费,命令末尾带0
表示从头部开始消费。XREADGROUP GROUP groupA consumer1 STREAMS mystream >
用于让消费者读取消息,消费组groupA内的消费者consumer1从mystream消息队列中读取所有信息。并且,同一消费组里的消费者不能读取同一条消息。XPENGDING
查询每个消费组内所有消费者已读取但未确认的消息,并且能查看某个消费者具体读了哪些数据XACK
向消息队列确认消息处理已经完成