redis的五种数据类型---Sorted Set类型

来源:互联网 发布:学而知不足,思而得远虑 编辑:程序博客网 时间:2024/06/06 14:09

前言

       有序集合类型是Redis五种数据类型中最高级的、也是最复杂的类型。

       继上篇讲解set后,我们来看set与sorted set区别

       与set相比,sorted sets就是将set中的元素增加一个权重参数:score,使得集合中元素能够按score有序排列,是插入有序的,即自动排序。这里需要注意的是尽管sorted-sets的成员必须是唯一的,但是score是可以重复的。当需要一个有序的并且不重复的集合列表时,这时就可以考虑sorted set数据结构

应用场景

       1、twitter 的public timeline可以以发表时间作为score来存储,这样获取时就是自动按时间排好序的。

       2、一个游戏的用户得分排行榜

       3、带权重的队列,比如普通消息的 score 为1,重要消息的 score 为2,然后工作线程可以选择按 score 的倒序来获取工作任务。让重要的任务优先执行。

例子

假设要处理考试成绩,首先要将学生姓名以及成绩录入

kongweiyan    成绩是70

liming              成绩是60

jenny              成绩是50.5

                     


       录入完毕了,下面我们进行取出数据,正序(ZRANGE),倒序(ZREVRANGE)

                                   


       如果,想要一个分段的统计呢,比如要60分以上的,即及格的,正序(ZRANGEBYSCORE),倒序(ZREVRANGEBYSCORE)

                            

实现原理

用到了两个数据结构:hash table和skip list(跳跃表),hash table中放的是成员到score的映射,跳跃表是所有的成功。 hash table是使用redis中的dict(即字典)来实现的。主要是为了保证查询效率为O(1)。但是跳跃表是主要是保证元素有序并能够保证INSERT和REMOVE操作是O(logn)的复杂度。至于详细的跳跃表的基本原理,可以参考下这篇文章:http://blog.sina.com.cn/s/blog_72995dcc01017w1t.html

延伸

分页查询

                                                 

注:key1是这个sortedset的key,最后一行:zrange key1 3 5:意思是pagesize=3,取第二页,下标3到5

根据下标去取,可以实现任意分页查询,性能也很好,实现高速分页查询。

小结

       redis的五种基本数据类型到此就介绍完毕了,在具体使用中,要结合不同的场景进行使用,还有一些其他功能的使用场景:如:订阅-发布系统;事务等等。下篇将介绍redis的一些基本操作

0 0
原创粉丝点击