Redis学习(八):有序集合(Sorter Set)

一、介绍

与set的区别在于“有序”二字,再集合类型的基础上都关联了一个分数(score).

二、与列表的区别

相同点:

(1)二者都是有序的。(区别于排序

(2)二者都可以获得某一范围内的元素。

不同点:

(1)列表是通过链表实现的,获取靠近两端的元素速度极快,而当元素增多以后访问中间数据的速度会较慢,所以它更适合实现如:新鲜事,日志等很少访问中间元素的应用;

(2)有序集合是使用散列表和跳跃表(skip list)实现的,所以即使读取位于中间部分的数据速度也很快(时间复杂度是O(log(N)));

(3)列表类型不能简单调整某个元素的位置,但是有序集合可以。(通过更改这个元素的分数);

(4)有序结合比列表更耗内存。

三、适用场景

1.按点击量、时间排序。

四、命令

1.增加元素

ZADD key score member [ score member ...]

向有序集合中加入一个元素及该元素的分数,如果该元素存在则会用新的分数替换掉原有的分数。返回新加入集合中的元素个数。分数不仅可以是整数,还支持双精度浮点数。

例:ZADD test +inf a -inf b;其中+inf,-inf分别表示正无穷大和负无穷大。

2.获得元素的分数

ZSCORE key member

3.获得排名在某一范围的元素列表

ZRANGE key start end [ WITHSCORES ]

ZREVRANGE key start end [ WITHSCORES ]

ZRANGE命令按元素分数从小到大的顺序返回索引从start到end之间的所有的元素(包含两端的元素,查询全部0 -1)。如果需要同时获取分数在命令后加上WITHSCORES。

ZRANGE命令的时间复杂度是O(log n+m)(其中n为有序集合的基数,m为返回的元素个数)。如果两个元素分数相同,Redis会按照字典顺序(0<9<A<Z<a<z)来进行排序。中文元素按照UTF-8编码进行排序。

ZREVRANGE命令代表从大到小返回。

3.获得指定分数范围的元素

ZRANGEBYSCORE key min max [WITHSCORES ] [ LIMIT offset count]

  • 按照元素分数从小到大的顺序返回分数在min和max之间(包含min和max)的元素。
  • 如果希望分数范围不包含端点值,可以在分数前边加上“(”符号,min和max支持无穷大。
  • LIMIT offset count:在获取得元素列表的基础上向后偏移offset个元素,并且只获取前count个元素。

ZREVRANGEBYSCORE:从大到小,max在前,min在后。

4.增加某个元素的分数

ZINCRBY key increment member :返回更改后的分数,如果指定的元素不存在,在执行命令之前会先建立它并将分数赋为0再执行命令。

5.获得集合中元素的个数

ZCARD key

6.获得指定分数范围内的元素个数

ZCOUNT key min max

7.删除一个或多个元素

ZREM key member [ member ...]:返回成功删除的元素数量

8.按照排名范围删除元素

ZREMRANGEBYRANK key start end

9.按照分数范围删除元素

ZREMRANGEBYSCORE key start end

10.获取元素的排名

ZRANK key member

ZREVRANK key member

11.计算有序集合的交集、并集

ZINTERSTORE destination numkeys key [key... ] [WEIGHTS weight [weight... ]] [AGGREGATE|SUM|MIN|MAX]

destination键中函数的分数是由AGGREGATE参数决定的。

  1. SUM:元素的分数是每个参与计算的集合中该元素的分数的和
  2. MIN:元素的分数是每个参与计算的集合中该元素的分数的最小值
  3. MAX:元素的分数是每个参与计算的集合中该元素的分数的最大值

WEIGTHS 每个集合的在计算中所占的权重。

ZUNIONSTORE:计算交集。

猜你喜欢

转载自blog.csdn.net/StringBuff/article/details/88114216
今日推荐