有序集合
2019-07-12 本文已影响0人
lookphp
特点
-- 元素不可重复
-- 元素可以排序 (它给每个元素设置一个分数(score)作为排序的依据。 )
列表、集合、有序集合的异同点
数据结构 | 是否允许重复元素 | 是否有序 | 有序实现方式 | 应用场景 |
---|---|---|---|---|
列表 | 是 | 是 | 索引下标 | 消息队列、文章列表、时间轴 |
集合 | 否 | 否 | 无 | 标签、抽奖、社交 |
有序集合 | 否 | 是 | 分值(score) | 排行榜、社交 |
命令
集合内
- 添加成员
zadd key score member [score member ...]
有序集合相比集合提供了排序字段score
, 但也产生了代价,zadd的时间复杂度为O(log(n)),sadd为O(1)。 - 计算成员个数
zcard key
- 计算某个成员的分数
zscore key member
- 计算成员的排名
zrank key member
zrevrank key member
- 删除成员
zrem key member
- 增加成员分数
zincrby key increment member
- 返回指定排名范围的成员
zrange key start end [withscores]
zrevrange key start end [withscores]
- 返回指定分数范围的成员
zrangebyscore key min max [withscores] [limit offset count]
zrevrangebyscore key max min [withscores] [limit offset count]
同时 min 和 max 还支持开区间(小括号)和闭区间(中括号),-inf 和
+inf 分表代表无限小和无限大。 - 返回指定分数范围成员个数
zcount key min max
- 删除指定排名内的升序元素
zremrangebyrank key start end
- 删除指定分数范围内成员
zremrangebyscore key min max
集合间的操作
zadd user:ranking:1 1 kris 91 mike 200 frank 220 tim 250 martin 251 tom
zadd user:ranking:2 8 james 77 mike 625 martin 888 tom
- 交集
- 并集
内部编码
- ziplist(压缩列表)
- skiplist (跳跃表)
使用场景
- 添加用户赞数
- 取消用户赞数
- 展示获取用户赞数最多的十个用户
- 展示用户信息及用户分数