一、常用的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的元素赋值给keyrpoplpush 列表1 列表2从列表1的右端弹出的元素从左端进入列表2lset key index value已有值,设置该列表的index为valuelinsert key before / after已经存在值,插入新值
四、哈希
此时的value也是一个key-value
hset/hget/hmset/hmget/hgetall/hdelhlen获取某个key内的全部哈希对数量hexists key在key里面的某个值的key是否存在hkeys/hvalskey里面所有哈希对的键/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向消息队列确认消息处理已经完成













![绝地求生:[更新周报] 4/3 不停机更新:无上新、众多物品和活动即将下架!](https://img-blog.csdnimg.cn/direct/6523f522944c442cad9b6d65dc30db0a.png)





