string 字符串
键值结构
字符串数据类型的值可以是:string、int、二进制类型
键 | 值 | 值类型 |
---|---|---|
hello | world | string 类型 |
city | 10 | int 类型 |
bits | 10101010 | 二进制类型/位图 |
json | {“city”: 1, “people”: 100} | json 字符串类型、xml等 |
限制:值最大不能超过 512MB 。一般日常使用,考虑带宽、内存使用,建议在 100 KB 以内。
应用场景
- 缓存
- 计数器
- 分布式锁
-
常用命令
获取/设置/删除:
get/set/del
- 递增/递减:
incr/decr/incrby/decrby
- 存在/不存在设置:
setnx/setxx
- 批量获取/设置:
mget/mset
- 设置新值并返回旧值/将值追加到旧值后/返回字符串长度(注意中文):
getset/append/strlen
- 递增浮点值/获取下标值/设置下标值:
incrbyfloat/getrange/setrange
hash 哈希
键值结构
key | field | value |
---|---|---|
user:1:info | id | 1 |
name | 张三 | |
sex | 男 | |
… | … |
应用场景
- 获取/设置/删除:
hget/hset/hdel
- 判断field是否存在/获取所有field的数量:
hexists/len
- 获取/设置一批field的值:
hmget/hmset
- 返回所有的field和值/返回key所有的value/返回key所有的field:
hgetall/hvals/hkeys
- 设置不存在的值/递增/递增浮点数:
hsetnx/hincrby/hincrbyloat
注:
hgetall
使用应注意性能
说明:Hash 比 String 更节约内存;(官网参考数据:Hash最小利用与 String 的内存空间节省约 5 倍)
list 列表
列表结构
key | elements |
---|---|
user:1:messages | a、b、c、d、e、f… |
应用场景
- timeline:如微博、朋友圈时间轴业务实现
- 队列
-
常用命令
从右/左边插入1或多个值:
rpush/lpush
- 在指定可以的某个值的前面/后面追加一个值:
linsert
(时间复杂度O(n),会遍历列表所有值) - 从左/右边取出(并删除)一个元素:
lpop/rpop
- 从左边删除X个value元素:
lrem
- 语法:
lren key count value
,并返回删除成功的数量 - 当
count > 0
,从左到右删除符合的数量 - 当
count < 0
,从右到左删除符合的数量 - 当
count = 0
,删除所有符合的数量
- 语法:
- 修剪指定范围的的元素:
ltrim
;语法:ltrim key start stop
- 适用大列表删除,减少 redis 慢速
- 返回指定范围的元素:
lrange
- 返回指定下标的元素:
lindex
- 获取列表的长度:
llen
- 设置指定下标的值:
lset
set 集合
键值结构
| key | elements | | —- | —- | | user:1:follow | a、b、c、d、e、f… |
应用场景
- 用户关注清单
- 抽奖系统:随机抽取X名(spop)
- like、点赞、踩的实现
-
常用命令
添加、删除元素:
sadd/srem
- 计算集合总数/判定集合是否有指定元素/随机取出指定数量元素/取出集合所有元素:
scard/sismember/srandmember/smembers
- 其中
smembers
返回结果是无序的;且是返回所有,在生产环境应注意使用。
- 其中
- 从集合中随机取出(并删除)指定数量的元素:
spop
集合间命令
- 差集:
sdiff
- 交集:
sinter
- 并集:
sunion
- 差集/交集/并集存储到新的集合:
sdiffstore/sinterstore/sunionstore
示例:
key | elements |
---|---|
user:1:follow | it、music、his、sports |
user:2:follow | it、news、ent、sports |
类型 | 命令 | 结果 |
---|---|---|
差集 | sdiff user:1:follow user:2:follow |
his、music |
交集 | SINTER user:1:follow user:2:follow |
it、sports |
并集 | SUNION user:1:follow user:2:follow |
it、music、his、sports、news、ent |
zset 有序集合
键值结构
key | score | value |
---|---|---|
user:ranking | 10 | 张三 |
11 | 李四 | |
… | … |
集合 vs 有序集合 vs 列表
类别 | 集合 | 有序集合(zset) | 列表 |
---|---|---|---|
重复性 | 无重复元素 | 无重复元素 | 有重复元素 |
排序 | 无序 | 有序 | 有序 |
数据 | 元素 | 分值+元素 | 元素 |
应用场景
-
常用命令
增加/删除:
zadd/zrem
zadd key score value
:zadd dd 99 aaa
、zadd dd 99 aaa 88 bbb 77 ccc
zrem key value
:zrem dd aaa
- 返回元素的分数:
zscore
zscore key value
:zscore dd bbb
- 自增:
zincrby
zincrby key incrment value
:zincrby dd 11 bbb
- 返回集合总数:
zcard
zcard key
:zcard dd
- 返回可以指定范围的升序元素:
zrange
zrange key start stop [withscores]
:zrange dd 0 -1
withscores
可将分数打印出来
- 返回指定分数范围内的升序元素:
zrangebyscore
zrangebyscore key minscore maxscore
:zrangebyscore dd 2 3
- 返回指定分数范围内的元素总数:
zcount
zcount key minscore maxscore
:zcount dd 2 3
- 删除指定排名内的升序元素/珊瑚指定分数范围内的升序元素:
zremrangebyrank/zremrangebyscore
zremrangebyrank key start stop
:zremrangebyrank`` dd 1 2
zremrangebyscore key minscore maxscore
:zremrangebyscore `` dd 1 2