十大数据类型
官网:Commands | Redis
一图概览
Redis7 十大数据类型基本命令和案例脑图概览
✨✨🔶文章末尾有彩蛋哦
一、字符串(String)
设置指定 key 的值
set key value
获取指定 key 的值
get key
返回 key 中字符串的子字符
getRange key start end
设置指定 key 的值,并返回旧值
getSet key value set key value get
获取所有 key 值
keys * mGet key1 key2 ...
设置指定 key 的值,并指定过期时间
以秒为单位
set key value ex seconds setEx key seconds value # 通过 ttl key 获取过期时间,-1 永不过期;-2 已过期
以毫秒为单位
pSetEx key millisecond value
更新数据并且保持原来的过期时间
set key value keepttl
当 key 不存在的时候设置 key 的值
setNx key value
从偏移量 offset 开始,覆盖原来的 value 值
setRange key offset value
返回 key 所存储的字符串的长度
strLen key
同时设置一个或多个 key-value 对
mSet key1 value2 key2 value2 ...
同时设置多个 key-value 对,当给定的 key 都不存在时
mSetNx key1 value2 key2 value2 ...
将 key 中存储的数值加一
incr key
指定增长量
incrBy key increment
指定增长的浮点增量值
incrByFloat key increment
将 key 中增长量的数值减一
decr key
指定 减量值
decrBy key increment
如果 key 存在且为字符串,将 value 值追加到末尾
append key value
二、列表(List)
添加元素
# 将一个或多个值插入到列表的头部 lpush key value1 value2 value3 ...... # 将一个或多个值插入到已存在的列表的头部 lpushx key value # 将值插入到列表的尾部 rpush key value1 value2 value3 ...... # 将一个或多个值插入到已存在的列表的尾部 rpushx key value
遍历元素
# 遍历所有元素 lrange key 0 -1 # 遍历 索引范围为 start — top 的元素 lrange key start stop
移除并返回元素
# 移除并获取列表的第一个元素 lpop key # 移除并获取列表的最后一个元素 rpop key
通过索引获取列表中的元素
lindex key index
获取列表的长度
llen key
在列表的元素前或后插入元素
# 在列表元素 pivot 前面插入 element linsert key before pivot element # 在列表元素 pivot 后面插入 element linsert key after pivot element
通过索引设置元素的值
lset key index value
删除列表元素中重复的n个值
# 删除 N 个 值等于 value 的元素 lrem key N value
截取指定范围的值后赋值给key
ltrim key start stop
移除列表的最后一个元素并将该元素添加到另外一个列表并返回
# 将 key1 列表的最后一个元素移除,并添加到 key2 列表 rpoplpush key1 key2
三、哈希(Hash)
设置hash
# 将哈希表 key 中的字段 field 的值设为 value hset key field value # 同时将多个 field-value 对设置到 hash表 key 中 hmset key field1 value field2 value2 ...... # 当字段 field 不存在时,设置哈希表字段的值 hsetnx key field value
获取
# 获取存储在哈希表中指定字段的值 hget key field # 获取所有给定的字段值 hmget key field1 field2 ...... # 获取在哈希表中指定 key 的所有字段和值 hgetall key # 获取所有字段 hkeys key # 获取所有值 hvals key
删除
# 删除一个或多个哈希表字段 hdel key field1 field2 ......
获取哈希表中字段的数量
hlen key
查看哈希表 key 中是否存在指定字段
hexists key field
哈希表 key 中指定字段 增加
# 为哈希表 key 中指定字段的整数数值加上增量 increment hincrby key field increment # 为哈希表 key 中指定字段的浮点数值加上增量 increment hincrbyfloat key field increment
四、集合(Set)
向集合中添加成员
sadd key member1 [member2 ......]
遍历集合中的所有元素
smembers key
获取集合中的元素个数
scard key
判断元素是否在集合中
sismember key member
删除元素
# 删除集合中的一个或多个成员 srem key member1 [memeber2 ...] # 随机删除 count 个元素并返回 spop key count # 将 member 元素从 集合1 移动到 集合2 smove key1 key2 member
返回集合中一个或多个随机数
srandmember key count # eg: 随机返回set1中的 n个随机数 srandmember set1 n
集合的运算
差集(A-B)
sdiff key1 [key2 ...] # 返回给定所有集合的差集并存储在 destination 中 sdiffstore destination key1 [key2 ...]
并集(A∪B)
sunion key1 [key2 ...] # 返回给定所有集合的并集并存储在 destination 中 sunionstore destination key1 [key2 ...]
交集(A∩B)
sinter key1 [key2 ...] 返回给定的所有集合的交集并存储在 destination 中 sinterstore destination key1 [key2 ...] # redis7 新命令,不会返回结果集,返回结果的交集的基数(个数) sintercard keyCount key1 [key2 ...]
五、有序集合(ZSet)
添加一个或多个成员
zadd key score1 member1 [score1 member1 ...]
通过索引区间返回有序集合指定区间内的成员
# 按照元素分数从底到高的顺序 withcores带分数 zrange key start stop [withcores] # 按照元素分数从高到底的顺序 withcores带分数 zrevrange key start stop [withcores] # 通过分数从低到高返回有序集合指定区间的成员 # 默认包含边界,( 表示不包含边界 zrangebyscore key min max [withscores] [limit offset count] # 通过分数从高到低返回有序集合指定区间的成员 zrevrangebyscore key max min [withscores] [limit offset count]
获取元素的分数
zscore key member
获取集合中元素的数量
scard key
获取指定分数范围内的元素个数
zcount key min max
获取指定成员的索引
zrank key member # 获取指定成员的索引,逆序 zrevrank key member
删除
zrem key member1 [member2 ...] # 删除指定成员区间的所有成员 zremrangebylex key [memberStart [memberStop # 删除指定索引区间(排名区间)的所有成员 zremrangebyrank key indexStart indexStop # 删除指定的分数区间的所有成员 zremrangebyscore key minScore maxScore
增加某个元素的分数
zincrby key increment member
六、位图(bitmap)
给指定 key 的值的第 offset 赋值value
setbit key offset value # value的值只能位 0 或者 1
获取指定 key 的第offset位
getbit key offset
统计字节数占用多少
strlen key
统计 1 的个数
bitcount key start end
对不同的二进制存储数据进行位运算(and、or、not、xor)
bitop operation destinationKey key # eg:统计两天都连续签到的用户 # 将用户id和位置做映射,如下 # 用户 023uh 映射为 0 hset uid:map 0 023uh # 用户 02rhh 映射为 1 hset uid:map 1 02rhh # 模拟用户在 20240201 20240202 两天的登录 setbit 20240201 0 1 setbit 20240201 1 1 setbit 20240201 2 1 setbit 20240201 3 1 setbit 20240202 0 1 setbit 20240202 1 1 bitop and destinationKey 20240201 20240202 bitcount destinationKey
七、基数统计(HyperLoglog)
添加元素到HyperLoglog
pfadd key element1 [element2 ...]
获取基数估计值
pfcount key1 [key2 ...]
合并 HyperLoglog
pfmerge destinationKey sourceKey1 [sourceKey2 ...]
八、地理空间(GEO)
添加经纬度坐标
geoadd key longitude1 latitude1 member1 [longitude2 latitude2 member2 ...]
遍历
zrange key start end zrange city 0 -1
返回元素的经纬度
geopos key member1 [member2 ...] # geohash表示 geohash key member1 [member2 ...]
返回两个位置之间的距离
geodist key member1 member2
返回与给定的经纬度的中心位置不超过给定的最大距离的所有位置元素
# 以半径为中心,查找 georadius key longitude latitude radius m[km ...] georadiusbymember key member radius m[km ...]
九、流(Stream)
添加消息到队列末尾
# 消息的 id必须要比上一个 id大,默认用 星号表示自动生成规则 xadd key id/* field1 value1 [field2 value2 ...] xadd mystream * id 11 cname z3
获取消息列表,忽略删除的消息
xrange key start end [count count] # eg xrange mystream - + count 4 # 反向获取,ID 从大到小 xrevrange key end start [count count]
删除消息
xdel key id1 [id2 ...]
获取消息长度
xlen key
对Stream长度进行截取,超长会进行截取
# 允许的最大长度 xtrim key maxlen mumber # 允许的最小id,比该id小的值会被舍弃 xtrim key minid mumber
获取消息
# 非阻塞 xread [count count] streams key id1 [id2 ...] # eg: xread count 2 streams mystream $ xread count 2 streams mystream 0-0 # 阻塞 xread [count count] block milliseconds streams key id1 [id2 ...] # eg: xread count 1 block 0 streams mystream $
创建消费组
xgroup create key groupName id|$ # eg: xgroup create mystream groupA $ xgroup create mystream groupB 0
读取消费者组中的消息
xreadgroup group groupName consumerName [count count] streams key # eg: xreadgroup group groupA consumer1 count 2 streams mystream > xreadgroup group groupA consumer2 count 2 streams mystream > xreadgroup group groupA consumer3 count 2 streams mystream >
获取消费组内所有消费者待处理的详细消息
# 查询每个消费组内所有消费者 [已读但未确认] 的消息 xpending key groupName # 查看某个消费者具体读取了那些数据 xpending key groupName start stop count consumerName # eg: xpending mystream groupA - + 10 consumer2
向消息队列确认消息处理完成
xack key groupName id # eg: xack mystream groupA 1679119688868-0
打印Stream、Consumer、Group的详细信息
xinfo stream key
十、位域(bitfield)