有序集合类型(sorted set)在集合类型的基础上为集合中的每个元素都关联了一个分数,使得我们不仅可以完成插入、删除和判断元素是否存在等集合类型支持的操作,还能够获得分数最高(或最低)的前N个元素、获得指定分数范围内的元素等与分数有关的操作。
虽然集合中每个元素都是不同的,但是它们的分数却可以相同。
有序集合类型和列表类型的相似点:
- 二者都是有序的
- 二者都可以获得某一范围的元素
有序集合类型和列表类型的不同点,使得它们的应用场景也是不同的:
- 列表类型是通过链表实现的,获取靠近两端的数据速度极快,而当元素增多后,访问中间数据的速度会较慢,所以它更加适合实现如“新鲜事”或“日志”这样很少访问中间元素的应用。
- 有序集合类型是使用散列表和跳跃表(Skip list)实现的,所以即使读取位于中间部分的数据速度也很快(时间复杂度是O(log(N)))。
- 列表中不能简单地调整某个元素的位置,但是有序集合可以(通过更改这个元素的分数)。
- 有序集合要比列表类型更耗费内存。
命令 | 举例 | 说明 |
ZADD key score member [score member ... ] | 增加元素 | |
ZSCORE key member | 获得元素的分数 | |
ZRANGE/ZREVRANGE key start stop [WITHSCORES] | 获得排名在某个范围的元素列表 | |
ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count] | 获得指定分数范围的元素 | |
ZINCRBY key increment member | 增加某个元素的分数 | |
ZCARD key | 获得集合中元素的数量 | |
ZCOUNT key min max | 获得指定分数范围内的元素个数 | |
ZREM key member [member ... ] | 删除一个或多个元素 | |
ZREMRANGEBYBANK key start stop | 按照排名范围删除元素 | |
ZREMRANGEBYSCORE key min max | 按照分数范围删除元素 | |
ZRANK/ZREVRANK key member | 获得元素的排名 |