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 - 设置指定下标的值:
lsetset 集合
键值结构
| 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/zremzadd key score value:zadd dd 99 aaa、zadd dd 99 aaa 88 bbb 77 ccczrem key value:zrem dd aaa
- 返回元素的分数:
zscorezscore key value:zscore dd bbb
- 自增:
zincrbyzincrby key incrment value:zincrby dd 11 bbb
- 返回集合总数:
zcardzcard key:zcard dd
- 返回可以指定范围的升序元素:
zrangezrange key start stop [withscores]:zrange dd 0 -1withscores可将分数打印出来
- 返回指定分数范围内的升序元素:
zrangebyscorezrangebyscore key minscore maxscore:zrangebyscore dd 2 3
- 返回指定分数范围内的元素总数:
zcountzcount key minscore maxscore:zcount dd 2 3
- 删除指定排名内的升序元素/珊瑚指定分数范围内的升序元素:
zremrangebyrank/zremrangebyscorezremrangebyrank key start stop:zremrangebyrank`` dd 1 2zremrangebyscore key minscore maxscore:zremrangebyscore `` dd 1 2
