Redis教程12-有序集合(sorted set)常用命令使用参考2

1.ZRANGEBYSCORE

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) 时间。

可选的 WITHSCORES 参数决定结果集是单单返回有序集的成员,还是将有序集成员及其 score 值一起返回。
该选项自 Redis 2.0 版本起可用。
区间及无限

min 和 max 可以是 -inf 和 +inf ,这样一来,你就可以在不知道有序集的最低和最高 score 值的情况下,使用 ZRANGEBYSCORE 这类命令。

默认情况下,区间的取值使用闭区间 (小于等于或大于等于),你也可以通过给参数前增加 ( 符号来使用可选的开区间 (小于或大于)。

举个例子:

127.0.0.1:6379> zrangebyscore names (1 5 withscores    // 返回所有符合条件 score <= 5 的成员
1) "tom"
2) "2"
3) "lisi"
4) "3"
5) "jerry"
6) "4"
7) "wangwu"
8) "5"
127.0.0.1:6379> zrangebyscore names (1 (5 withscores    // 返回所有符合条件 score < 5 的成员
1) "tom"
2) "2"
3) "lisi"
4) "3"
5) "jerry"
6) "4"

可用版本:>= 1.0.5

时间复杂度:O(log(N)+M), N 为有序集的基数, M 为被结果集的基数。

返回值:指定区间内,带有 score 值(可选)的有序集成员的列表。

127.0.0.1:6379> zrangebyscore names -inf +inf    // 不知道score范围, 显示全部元素
1) "zhangsan"
2) "tom"
3) "lisi"
4) "jerry"
5) "wangwu"
127.0.0.1:6379> zrangebyscore names -inf +inf withscores    // 显示score
 1) "zhangsan"
 2) "1"
 3) "tom"
 4) "2"
 5) "lisi"
 6) "3"
 7) "jerry"
 8) "4"
 9) "wangwu"
10) "5"
127.0.0.1:6379> zrangebyscore names 1 (5 withscores    // 显示1<=score<5的成员
1) "zhangsan"
2) "1"
3) "tom"
4) "2"
5) "lisi"
6) "3"
7) "jerry"
8) "4"
127.0.0.1:6379> zrangebyscore names (1 (5 withscores    // 显示1<score<5的成员
1) "tom"
2) "2"
3) "lisi"
4) "3"
5) "jerry"
6) "4"
127.0.0.1:6379>

2.ZRANK

ZRANK key member

返回有序集 key 中成员 member 的排名。其中有序集成员按 score 值递增(从小到大)顺序排列。

排名以 0 为底,也就是说, score 值最小的成员排名为 0 。

使用 ZREVRANK 命令可以获得成员按 score 值递减(从大到小)排列的排名。

可用版本:>= 2.0.0

时间复杂度:O(log(N))

返回值:

如果 member 是有序集 key 的成员,返回 member 的排名。
如果 member 不是有序集 key 的成员 或者 key不存在,返回 nil 。
127.0.0.1:6379> zrange names 0 -1    // 展示所有成员
1) "zhangsan"
2) "tom"
3) "lisi"
4) "jerry"
5) "wangwu"
127.0.0.1:6379> zrank names zhangsan    // zhangsan排在第一个
(integer) 0
127.0.0.1:6379> zrank names wangwu    // 排在第五个
(integer) 4
127.0.0.1:6379> zrank names jack    // member不存在, 返回nil
(nil)
127.0.0.1:6379> zrank ages jack    // key不存在, 返回nil
(nil)
127.0.0.1:6379>

3.ZREM

ZREM key member [member ...]

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

当 key 存在但不是有序集类型时,返回一个错误。

在 Redis 2.4 版本以前, ZREM 每次只能删除一个元素。

可用版本:>= 1.2.0

时间复杂度:O(M*log(N)), N 为有序集的基数, M 为被成功移除的成员的数量。

返回值:被成功移除的成员的数量,不包括被忽略的成员。

127.0.0.1:6379> zrange names 0 -1
1) "zhangsan"
2) "tom"
3) "lisi"
4) "jerry"
5) "wangwu"
127.0.0.1:6379> zrem ages 11    // key不存在, 返回0
(integer) 0
127.0.0.1:6379> zrem names jack    // 成员不存在, 返回0
(integer) 0
127.0.0.1:6379> zrem names zhangsan    // 删除单个成员
(integer) 1
127.0.0.1:6379> zrange names 0 -1
1) "tom"
2) "lisi"
3) "jerry"
4) "wangwu"
127.0.0.1:6379> zrem names tom lisi jerry    // 删除多个成员
(integer) 3
127.0.0.1:6379> zrange names 0 -1
1) "wangwu"
127.0.0.1:6379>

4.ZREMRANGEBYRANK

ZREMRANGEBYRANK key start stop

移除有序集 key 中,指定排名(rank)区间内的所有成员。

区间分别以下标参数 start 和 stop 指出,包含 start 和 stop 在内。

下标参数 start 和 stop 都以 0 为底,也就是说,以 0 表示有序集第一个成员,以 1 表示有序集第二个成员,以此类推。
你也可以使用负数下标,以 -1 表示最后一个成员, -2 表示倒数第二个成员,以此类推。
可用版本:>= 2.0.0
时间复杂度:O(log(N)+M), N 为有序集的基数,而 M 为被移除成员的数量。
返回值:被移除成员的数量。
127.0.0.1:6379> zadd names 1 tom 2 jerry 3 zhangsan 4 lisi 5 wangwu
(integer) 5
127.0.0.1:6379> zrange names 0 -1 withscores
 1) "tom"
 2) "1"
 3) "jerry"
 4) "2"
 5) "zhangsan"
 6) "3"
 7) "lisi"
 8) "4"
 9) "wangwu"
10) "5"
127.0.0.1:6379> zremrangebyrank names 0 3    // 移除下标0-3的四个成员
(integer) 4
127.0.0.1:6379> zrange names 0 -1    // 只剩下一个成员了
1) "wangwu"
127.0.0.1:6379>

5.ZREMRANGEBYSCORE

ZREMRANGEBYSCORE key min max

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

自版本2.1.6开始, score 值等于 min 或 max 的成员也可以不包括在内,详情请参见上面 1.ZRANGEBYSCORE 命令。

可用版本:>= 1.2.0

时间复杂度:O(log(N)+M), N 为有序集的基数,而 M 为被移除成员的数量。

返回值:被移除成员的数量。

127.0.0.1:6379> zadd names 1 tom 2 jerry 3 zhangsan 4 lisi 5 wangwu
(integer) 5
127.0.0.1:6379> zrange names 0 -1 withscores    // 显示所有集合成员
 1) "tom"
 2) "1"
 3) "jerry"
 4) "2"
 5) "zhangsan"
 6) "3"
 7) "lisi"
 8) "4"
 9) "wangwu"
10) "5"
127.0.0.1:6379> zremrangebyscore names 1 2    // 删除1<=score<=2的成员
(integer) 2
127.0.0.1:6379> zrange names 0 -1 withscores
1) "zhangsan"
2) "3"
3) "lisi"
4) "4"
5) "wangwu"
6) "5"
127.0.0.1:6379> zremrangebyscore names (3 (5    // 删除3<score<5的成员
(integer) 1
127.0.0.1:6379> zrange names 0 -1 withscores
1) "zhangsan"
2) "3"
3) "wangwu"
4) "5"
127.0.0.1:6379>
posted @ 2020-09-23 09:50  KILLNPE  阅读(197)  评论(0编辑  收藏  举报