ZREMRANGEBYCANK ZREMRANGEBYCORE之间存在差异

时间:2017-06-12 07:38:16

标签: redis sortedset

ZREMRANGEBYRANKZREMRANGEBYSCORE之间的区别是什么?

向我解释以下查询:

127.0.0.1:6379> ZRANGEBYSCORE my 1 10 WITHSCORES
1) "b"
2) "1"
3) "a" 
4) "4"

1 个答案:

答案 0 :(得分:1)

让我们先设置ZSet

ZADD myzset 1 "one"
ZADD myzset 2 "two"
ZADD myzset 3 "three"
ZADD myzset 4 "four"
ZADD myzset 5 "five"
ZADD myzset 6 "six"
ZADD myzset 7 "seven"
ZADD myzset 8 "eight"
ZADD myzset 9 "nine"
ZADD myzset 10 "ten"

让我们看看你在下面的命令中选择了什么:

127.0.0.1:6379> ZRANGE myzset 0 10 WITHSCORES
 1) "one"
 2) "1"
 3) "two"
 4) "2"
 5) "three"
 6) "3"
 7) "four"
 8) "4"
 9) "five"
10) "5"
11) "six"
12) "6"
13) "seven"
14) "7"
15) "eight"
16) "8"
17) "nine"
18) "9"
19) "ten"
20) "10"
  

所以它会选择所有元素。

ZREMRANGEBYSCORE

输出

127.0.0.1:6379> ZREMRANGEBYSCORE myzset 5 8 
(integer) 4
127.0.0.1:6379> 
127.0.0.1:6379> ZRANGE myzset 0 10 WITHSCORES
 1) "one"
 2) "1"
 3) "two"
 4) "2"
 5) "three"
 6) "3"
 7) "four"
 8) "4"
 9) "nine"
10) "9"
11) "ten"
12) "10"
  

因此,将删除具有最低分数5到最高分数8的元素。这里删除了元素,得分为:5,6,7,8

ZREMRANGEBYRANK

输出

127.0.0.1:6379> ZREMRANGEBYRANK myzset 5 8
(integer) 4
127.0.0.1:6379> 
127.0.0.1:6379> ZRANGE myzset 0 10 WITHSCORES
 1) "one"
 2) "1"
 3) "two"
 4) "2"
 5) "three"
 6) "3"
 7) "four"
 8) "4"
 9) "five"
10) "5"
11) "ten"
12) "10"
  

因此,将删除具有最小索引5到最大索引8的元素。此处删除元素:6,7,8,9,其索引为5,6,7,8

按照Redis Commands Documentation

  

ZREMRANGEBYSCORE key min max

     

使用分数删除存储在key中的有序集合中的所有元素   在最小和最大(包括)之间。

     

ZREMRANGEBYRANK 按键开始停止

     

删除存储在key中的排序集中的所有元素,其中等级为   开始和停止。 start和stop都是基于0的索引,0为   分数最低的元素。这些指数可能是负数   数字,它们表示从元素开始的偏移量   得分最高。例如:-1是得分最高的元素,   -2分数第二高的元素,等等。