Redis数据类型·集合(有序)

一、介绍:

  • 在集合类型的基础上有序集合类型为集合中的每个元素都关联了一个分数

  • 这使得我们不仅可以完成插入、删除和判断元素是否存在等集合类型支持的操作,还能够获得分数最高(或最低)的前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"
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容