本文版权归博客园和作者吴双本人共同所有,博客园蜗牛NoSql系列分享 http://www.cnblogs.com/tdws/tag/NoSql/Sorted Set
有序集合—Sorted Set是我最后要分享的一种Redis数据类型,有序集合在集合的基础上,为每一个元素,关联了一个分数的概念(Score)。不要忘了,集合众元素是唯一的,但是有序集合中的Score是可以相同的。
下面通过命令的介绍,来帮助大家认识有序集合。
添加命令,ZADD key score member score member....注意分数是在前面哟。并且成功后返回成功数量。如果你同时添加两个相同元素,并且分数不同,那么被存入的,是后者。
获取元素,ZRANGE key start stop.在有序集合中,元素以score由小到大排序,并且索引从0开始。获取全部,0 -1(最后面的元素索引是-1),和列表一样,start索引要大于stop索引才能获取到元素。另外还有一个可选参数,WithScores,会相应的输出元素的分数。
另外还有ZRevRange,按照score从大到小的顺序输出。
Score支持双精度浮点数。
ZRangeByScore和ZRevRangeByScore。前者按照分数由小到大,并且给定分数范围,withScores是可选参数。limit也是可选参数,索引从0开始。后者则是由大到小。
另外需要特别注意的一点是,分数的筛选支持正无穷,和不包含‘(’符号。我们看到结果中,并没有95分的LeiJun。并且到正无穷。
ZSCORE,获取指定key中指定元素的score。
ZInctBy ,为指定键下的指定Member,增加指定的 分数。我们给LeiJun增加了10分,返回105了。
ZCARD,获取键下元素个数。我们看到有七个学生哈。
ZCOUNT ,获取制定分数区间,元素个数,注意分数筛选,也支持‘(’不包含选择符。
ZREM,移除元素。
ZRemRangeByScore,按照分数范围删除多个元素。
ZRemRangeByRank,按照正常由小到大的排名顺序删除,又有两个分数低的被删掉了。
ZRANK,获取指定元素的排名。从0开始。ZRevRank则相反
不足之处,欢迎补充和交流。
最后再简单总结有序集合和列表。有序集合和列表都是有序的,并且可以按照范围来获取元素。
列表通过链表来实现,获取靠近两端的数据速度很快,当数据量比较大的时候,获取中间的元素相应会变慢,比如你微信的朋友圈,大多使人看的都是这几天,最多也不过近几天的数据。中间元素很少会访问。
而有序集合使用跳跃表和散列表实现,其时间复杂度O(log(N)),所以取中间元素也很快。并且有序集合可以通过更改分数,来调整元素的位置。有序集合也更耗费内存。