一、常用key命令
|--------------------|-------------------------------------------|
| keys * | 查看当前库的所有key |
| exists key | 判断某个key是否存在 |
| type key | 查看key的类型 |
| del key | 删除指定key |
| unlink key | 非阻塞删除,仅将key从keyspace元数据中删除,真正的删除会在后续异步中操作 |
| ttl key | 查看还有多少秒过期,-1表示永不过期,-2表示已过期 |
| expire key seconds | 为key设定过期时间 |
| move key dbindex | 将当前数据库中的key移动到指定数据库中 |
| select dbindex | 切换数据库,默认为0号数据库 |
| dbsize | 查看当前数据库key的数量 |
| flushdb | 清空当前库 |
| flushall | 清空全部库 |
- redis命令不区分大小写,但key区分大小写
二、string类型
1. set
bash
SET key value [NX | XX] [GET] [EX seconds | PX milliseconds |
EXAT unix-time-seconds | PXAT unix-time-milliseconds | KEEPTTL]
将键 key
设定为指定的"字符串"值。如果 key
已经保存了一个值,那么这个操作会直接覆盖原来的值,并且忽略原始类型。当 set
命令执行成功之后,之前设置的过期时间都将失效。
- NX -- 只有键 key 不存在的时候才会设置 key 的值
- XX -- 只有键 key 存在的时候才会设置 key 的值
- GET -- 返回 key 之前存储的值,如果 key 不存在返回空
EX
seconds -- 设置键key的过期时间,单位为秒PX
milliseconds -- 设置键key的过期时间,单位为毫秒- EXAT unix-time-second -- 设置键key的过期时间戳,单位为秒
- PXAT unix-time-milliseconds -- 设置键key的过期时间戳,单位为毫秒
KEEPTTL
-- 保留 key 的过期时间
其他相关命令
bashmset k1 v1 k2 v2 ... 设置多个key的值 mget k1 k2 k3 ... 获取多个key的值 msetnx k1 v1 k2 v2 ... 当key不存在时设置key的值 getrange key start end 获取key的值 [start, end] 的子串,负数表示从后面开始第几位 setrange key offset value 从offset位开始,用value替换原来从offset开始的相同长度的字符串
2. incr/decr
bash
incr key 将key的值(一定要是数字)加1
decr key 将key的值减1
incrby key increment 将key的值加increment
decrby key decrement 将key的值减decrement
3. strlen/append
bash
strlen key 获取key的值的长度
append key value 在key的值后面拼接value
三、list类型
bash
LPUSH 将一个或多个值插入到列表头部
RPUSH 将一个或多个值插入到列表尾部
LRANGE 获取列表指定范围内的元素
LPOP 移出并获取列表的第一个元素
RPOP 移除并获取列表最后一个元素
LINDEX 通过索引获取列表中的元素
LLEN 获取列表长度
LREM 从列表头部开始移除指定个数等于指定值的元素
LTRIM 对列表按给定范围进行截取
RPOPLPUSH 移除列表的最后一个元素,并将该元素添加到另一个列表头部并返回
LSET 通过索引设置列表元素的值
LINSERT 在列表的指定元素前或者后插入元素
四、hash类型
bash
HSET 用于设置存储在 key 中的哈希表字段的值
HGET 获取存储在哈希表中指定字段的值
HGETALL 获取在哈希表中指定 key 的所有字段和值
HDEL 用于删除哈希表中一个或多个字段
HLEN 获取存储在 key 中的哈希表的字段数量
HEXISTS 用于判断哈希表中字段是否存在
HKEYS 获取存储在 key 中的哈希表的所有字段
HVALS 用于获取哈希表中的所有值
HINCRBY 为存储在 key 中的哈希表指定字段做整数增量运算
五、set类型
bash
SADD 向集合添加一个或多个成员
SMEMBERS 返回集合中的所有成员
SISMEMBER 判断 member 元素是否是集合 key 的成员
SREM 移除集合中一个或多个成员
SCARD 获取集合的成员数
SRANDMEMBER 随机返回集合中指定个数的元素
SPOP 移除并返回集合中的一个随机元素
SMOVE 将元素从一个集合移动到另一个集合
SUNION 返回所有给定集合的并集
SDIFF 返回给定所有集合的差集
SINTER 返回给定所有集合的交集
六、zset类型
bash
ZADD 向有序集合添加一个或多个成员,或者更新已存在成员的分数
ZRANGE 通过索引区间返回有序集合成指定区间内的成员
ZREVRANGE 返回有序集中指定区间内的成员,通过索引,分数从高到底
ZRANGEBYSCORE 通过分数返回有序集合指定分数区间内的成员
ZSCORE 返回有序集中成员的分数值
ZCARD 获取有序集合的成员数
ZREM 移除有序集合中的一个或多个成员
ZINCRBY 有序集合中对指定成员的分数加上增量 increment
ZCOUNT 计算在有序集合中指定区间分数的成员数
ZMPOP numkeys key [key ...] MIN|MAX [COUNT count]
从numkeys个排序集中按分数从小(大)弹出count个元素,它们是成员分数对
ZRANK 返回有序集合中指定成员的索引
ZREVRANK 返回有序集合中指定成员的排名,有序集成员按分数值递减(从大到小)排序
七、bitmap类型
由0和1状态表现的二进制位的bit数组,使用type key得到的结果为"string",可以看为string类型的子类。
bash
setbit key offset val 给指定key的值的第offset位(从0开始)赋值val
getbit key offset 获取指定key的第offset位
strlen key 统计字节数,8位为一字节
bitcount key start end 返回指定范围内1的数量
bitop operation destkey key [key...]
对不同的二进制存储数据进行位运算(and、or、not、xor),结果存入destkey
八、HyperLogLog
去重复统计功能的基数估计算法,只根据输入元素来计算基数,而不会存储输入元素本身。(基数可以看做是set的元素个数)
bash
pfadd key element [element ...] 添加指定元素到HyperLogLog
pfcount key [key ...] 返回给定HyperLogLog的基数估算值
pfmerge destkey sourcekey [sourcekey ...] 将多个HyperLogLog合并
九、GEO
存储地理位置。
bash
GEOADD 将指定的地理空间位置(纬度、经度、名称)添加到指定的key中
GEOPOS 从key里返回所有给定位置元素的位置(经度和纬度)
GEODIST 返回两个给定位置之间的距离
GEORADIUS 以给定的经纬度为中心, 找出某一半径内的元素
GEORADIUSBYMEMBER 找出位于指定范围内的元素,中心点是由给定的位置元素决定
GEOHASH 返回一个或多个位置元素的 Geohash 表示
十、stream
redis版的MQ,消息中间件+阻塞队列。
1. 队列相关
bash
xadd 添加消息到队列末尾,返回消息id(id格式:毫秒时间戳-该毫秒内的第几条(0开始)消息)
strim 限制stream长度,如果已经超长会进行截取
xdel 删除消息
xlen 获取stream中消息长度
xrange 获取消息列表,忽略删除的消息
xrevrange 和xrange相比在于反向获取,id从大到小
xread 获取消息,返回大于指定id的消息
2. 消费组相关
bash
XGROUP CREATE 创建消费者组,$表示从尾部开始消费(即只消费新加入的消息),0表示从头部
XREADGROUP GROUP group consumer STREAMS stream id
消费组group中的消费者consumer从stream中的id开始读取消息,id为>表示从
第一条尚未被消费的消息开始读取(stream中的消息一旦被消费组的一个消费者
读取了,就不能再被该消费组内的其他消费者读取了)
消费组的目的:让组内多个消费者共同分担读取消息,实现消息读取负载在多个消费者间是均衡分布的。
问题:基于 Stream 实现的消息队列,如何保证消费者在发生故障或宕机再次重启后,仍然可以读取未处理完的消息?
Streams 会自动使用内部队列(也称为 PENDING List)留存消费组里每个消费者读取的消息保底措施,直到消费者使用 XACK 命令通知 Streams"消息已经处理完成"。
消费确认增加了消息的可靠性,一般在业务处理完成之后,需要执行 XACK 命令确认消息已经被消费完成。
bash
xpending 查询每个消费组内所有消费者【已读取,但尚未确认】的消息
xack 向消息队列确认消息处理已完成
bash
xinfo 打印stream相关信息
十一、bitfields
将一个redis字符串看作是一个由二进制位组成的数组,并能对变长位宽和任意没有字节对齐的指定整型位域进行寻址和修改。
如 hello 等价于 01101000,01100101,01101100,01101100,01101111
(十进制为448378203247)。
bash
BITFIELD key [GET type offset |
[OVERFLOW WRAP|SAT|FAIL] SET type offset value |
INCRBY type offset increment]
- WRAP(默认值):使用回绕方法处理溢出,如i8表示八位有符号二进制,范围为-128-127,当127+i溢出时,得到的值为-128+(i-1)
- SAT:使用饱和计算方法处理溢出,下溢结果为最小整数值,上溢为最大整数值
- FAIL:拒绝执行导致溢出的计算,并向用户返回空值表示计算未被执行