一、介绍:
在集合类型的基础上有序集合类型为集合中的每个元素都关联了一个分数
这使得我们不仅可以完成插入、删除和判断元素是否存在等集合类型支持的操作,还能够获得分数最高(或最低)的前N个元素、获得指定分数范围内的元素等与分数有关的操作
虽然集合中每个元素都是不同的,但是它们的分数却可以相同。
-
有序集合类型在某些方面和列表类型有些相似
- 二者都是有序的
- 二者都可以获得某一范围的元素
-
有序集合类型和列表也有着很大的区别,这使得它们的应用场景也是不同的
- 列表类型是通过链表实现的,获取靠近两端的数据速度极快,而当元素增多后,访问中间数据的速度会较慢,所以它更加适合实现如“新鲜事”或“日志”这样很少访问中间元素的应用
- 有序集合类型是使用散列表和跳跃表(Skip list)实现的,所以即使读取位于中间部分的数据速度也很快
- 列表中不能简单地调整某个元素的位置,但是有序集合可以(通过更改这个元素的分数)
- 有序集合要比列表类型更耗费内存
二、命令:
命令 | 说明 |
---|---|
ZADD z value key | 加入元素 ZADD命令的返回值是新加入到集合中的元素个数 如果该元素已经存在则会用新的分数替换原有的分数 |
ZRANGE z startNum endNum | 查看集合数据,不带分数 |
ZRANGE z startNum endNum WITHSCORES | 查看集合数据,带分数 |
ZSCORE z key | 获得元素的分数 |
ZRANGEBYSCORE z startScores endScores WITHSCORES | 获得指定分数范围的元素 |
ZINCRBY z value key | 增加某个元素的分数 |
ZCARD z | 获得集合中元素的数量 |
ZCOUNT z startScores endScores | 获得指定分数范围内的元素个数 |
ZREM z key | 删除元素 |
ZRANK z key | 获得元素的排名 升序排列,从0开始计数 |
ZREVRANK z key | 获得元素的排名 降序排列,从0开始计数 |
三、有序集合类型实践
- 例:将博客文章按照点击量排序
127.0.0.1:6379> ZADD posts:page.view 0 post:10:page.view
(integer) 1
127.0.0.1:6379> ZINCRBY posts:page.view 1 post:10:page.view
"1"
127.0.0.1:6379> ZRANGE posts:page.view 0 -1 WITHSCORES
1) "post:10:page.view"
2) "1"