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之后的所有元素。