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) 时间。
min 和 max 可以是 -inf 和 +inf ,这样一来,你就可以在不知道有序集的最低和最高 score 值的情况下,使用 ZRANGEBYSCORE 这类命令。
默认情况下,区间的取值使用闭区间 (小于等于或大于等于),你也可以通过给参数前增加 ( 符号来使用可选的开区间 (小于或大于)。
举个例子:
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" 7) "wangwu" 8) "5" 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"
可用版本:>= 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))
返回值:
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 在内。
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>