Redis SortedSet

原创
2016/09/29 14:06
阅读数 137

SortedSet 有序集合

一个Set集合,但是内部通过score进行排序,排序值从 0 开始。

 

1、添加

>zadd key score member [[score member] [score member] ...]

将一个或多个 member 元素及其 score 值加入到有序集 key 当中。如果某个 member 已经是有序集的成员,那么更新这个 member 的 score 值,并通过重新插入这个 member 元素,来保证该 member 在正确的位置上。

 

2、求总数

>zcard key

返回有序集 key 的总数。

 

>zcount key min max

返回有序集 key 中, score 值在 min 和 max 之间(默认包括 score 值等于 min 或 max )的成员的数量,注意返回的是数量。

 

>zlexcount key min max

对于一个所有成员的分值都相同的有序集合键 key 来说, 这个命令会返回该集合中, 成员介于 min 和 max 范围内的元素数量。

 

3、删除

>zrem key member [member ...]

移除有序集 key 中的一个或多个成员,不存在的成员将被忽略。

 

>zremrangebyrank key start end

移除有序集 key 中,指定排名(rank)区间内的所有成员,包含start 和 end

 

>zremrangebyscore key min max

移除有序集 key 中,所有 score 值介于 min 和 max 之间(包括等于 min 或 max )的成员。

 

>zremrangebylex key min max

对于一个所有成员的分值都相同的有序集合键 key 来说, 这个命令会移除该集合中, 成员介于 min 和 max 范围内的所有元素。

 

4、查找

>zrange key start end [WITHSCORES]

返回有序集 key 中,指定排名区间内(包含start 和 end )的成员。其中成员的位置按 score 值递增(从小到大)来排序。具有相同 score 值的成员按字典序(lexicographical order)来排列。

WITHSCORES 选项决定是否返回对应的分数。

 

>zrevrange key start end [WITHSCORES]

和zrange 作用相同,区别是返回的成员是按 score 值递减(从大到小)来排序。

 

>zrangebyscore key min max [WITHSCORES] [LIMIT offset count]

返回有序集 key 中,所有 score 值介于 min 和 max 之间(包括等于 min 或 max )的成员。有序集成员按 score 值递增(从小到大)次序排列。

具有相同 score 值的成员按字典序(lexicographical order)来排列。

可选的 LIMIT 参数指定返回结果的数量及区间(就像SQL中的 SELECT LIMIT offset, count ),注意当 offset 很大时,定位 offset 的操作可能需要遍历整个有序集,此过程最坏复杂度为 O(N) 时间.

 

>zrevrangebyscore key min max [WITHSCORES] [LIMIT offset count]

和zrangebyscore作用相同,区别是返回的成员是按 score 值递减(从大到小)来排序。

 

>zrangebylex key min max [LIMIT offset count]

当有序集合的所有成员都具有相同的分值时, 有序集合的元素会根据成员的字典序(lexicographical ordering)来进行排序, 而这个命令则可以返回给定的有序集合键 key 中, 值介于 min 和 max 之间的成员。如果有序集合里面的成员带有不同的分值, 那么命令返回的结果是未指定的(unspecified)。

 

5、排名与取值

>zrank key member

返回有序集 key 中成员 member 的排名。成员按 score 值递增(从小到大)顺序排列然后再取member的排名,排名从0开始。

 

>zrevrank key member

返回有序集 key 中成员 member 的排名。成员按 score 值递减(从大到小)排列的排名然后再取 member的排名,排名从0开始。

 

>zscore key member

返回有序集 key 中,成员 member 的 score 值。

 

 

6、i++

>zincrby key increment member

为有序集 key 的成员 member 的 score 值加上增量 increment 。

 

>zscan key cursor [MATCH pattern] [COUNT count]

根据游标的位置查找指定数量的元素,因为是批量获取,所以不会在大数据情况下堵塞

 

7、集合运算

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

1)计算给定的一个或多个有序集的并集,其中给定 key 的数量必须以 numkeys 参数指定,并将该并集(结果集)储存到 destination 。

2)默认情况下,结果集中某个成员的 score 值是所有给定集下该成员 score 值之和 。

3)WEIGHTS

使用 WEIGHTS 选项,你可以为 每个 给定有序集 分别 指定一个乘法因子(multiplication factor),每个给定有序集的所有成员的 score 值在传递给聚合函数(aggregation function)之前都要先乘以该有序集的因子。如果没有指定 WEIGHTS 选项,乘法因子默认设置为 1 。

4)AGGREGATE

使用 AGGREGATE 选项,你可以指定并集的结果集的聚合方式。默认使用的参数 SUM ,可以将所有集合中某个成员的 score 值之 和 作为结果集中该成员的 score 值;使用参数 MIN ,可以将所有集合中某个成员的 最小 score 值作为结果集中该成员的 score 值;而参数 MAX 则是将所有集合中某个成员的 最大 score 值作为结果集中该成员的 score 值。

 

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

计算给定的一个或多个有序集的交集,其中给定 key 的数量必须以 numkeys 参数指定,并将该交集(结果集)储存到 destination 。默认情况下,结果集中某个成员的 score 值是所有给定集下该成员 score 值之和.

 

 

注意:

lexicographical ordering (就是字符串的ASCII排序)排序指定范围规则

1)合法的 min 和 max 参数必须包含 ( 或者 [ , 其中 ( 表示开区间(指定的值不会被包含在范围之内), 而 [ 则表示闭区间(指定的值会被包含在范围之内)。

2)特殊值 + 和 - 在 min 参数以及 max 参数中具有特殊的意义, 其中 + 表示正无限, 而 - 表示负无限。 因此, 向一个所有成员的分值都相同的有序集合发送命令 ZRANGEBYLEX <zset> - + , 命令将返回有序集合中的所有元素。

3)示例 zrangebylex set [liu + 查找包含liu和排序在liu之后的所有元素。

 

 

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部