- 没有重复元素
- 其中的元素可以排序
- 排序依据: score
- score 可以重复
- 获取指定分数
- 元素范围查询
- 计算成员排名
比较:
2.6.1 命令
1. 集合内
(1) 添加成员
- zadd
- O(log n)
(2) 计算成员个数
- zcard
- O(1)
(3) 计算某个成员的分数
- zscore
(4) 计算成员的排名
- zrank
- zrevrank
(5) 删除成员
- zrem
(6) 增加成员的分数
- zincrby
(7) 返回指定排名范围的成员
- zrange
- zrevrange
- withscores 选项: 返回排名的同时也返回 score
(8) 返回指定分数范围的成员
- zrangebyscore
- zrevrangebyscore
(9) 返回指定分数范围成员个数
- zcount
(10) 删除指定排名内的升序元素
- zremrangebyrank
(11) 删除指定分数范围的成员
- zremrangebyscore
2. 集合间的操作
将两个有序集合导入到 Redis 中:
(1) 交集
- zinterstore
(2) 并集
- zunionstore
表2-8 有序集合命令的时间复杂度
2.6.2 内部编码
有序集合类型的内部编码有两种:
- ziplist: 当有序集合的元素个数小于 zset-max-ziplist-entries 配置 (默认128个), 同时每个元素的值都小于 zset-max-ziplist-value 配置 (默认64字节) 时, Redis 会用 ziplist 来作为有序集合的内部实现 ,ziplist 可以有效减少内存的使用。
- skiplist: 当 ziplist 条件不满足时, 有序集合会使用 skiplist 作为内部实现, 因为此时 ziplist 的读写效率会下降。
2.6.3 使用场景
排行榜系统.