如何在排序集中找到一个刚好低于某个值的元素

时间:2015-11-20 09:51:24

标签: redis

首先,我是Redis的新手。好吧,让我说我做了:

127.0.0.1:6379> zadd subs:x 0 0
127.0.0.1:6379> zadd subs:x 500 500
127.0.0.1:6379> zadd subs:x 1000 1000
127.0.0.1:6379> zadd subs:x 5000 5000
127.0.0.1:6379> zadd subs:x 10000 10000

我希望找到一个刚好超过2000和以下的元素。

以上简单易行:

127.0.0.1:6379> ZRANGEBYSCORE subs:x 2000 +inf LIMIT 0 1
1) "5000"

但是如何以简单的方式找到下面的元素?

1)我知道我能做到:

127.0.0.1:6379> ZRANGEBYSCORE subs:x -inf 2000 LIMIT 2 1
1) "1000"

但是在运行此命令之前我必须知道偏移量是2所以通常我必须首先找到偏移量。

2)或者我可以找到ZRANK,然后向后移动一步:

127.0.0.1:6379> ZRANK subs:x 5000
(integer) 3
127.0.0.1:6379>  ZRANGE subs:x 2 2
1) "1000"

所以我的问题是有一种简单的方法可以使元素低于某个值吗?

1 个答案:

答案 0 :(得分:1)

  

如上所述,但对于下方,请使用ZREVRANGEBYSCORE

Yoda-speak的翻译:

Redis实际上提供的命令可以满足您的需求 - ZREVRANGEBYSCOREZREVRANGEBYSCOREZRANGEBYSCORE做同样的事情,但使用反向排序(正如其名称中的“REV”所示)。

如您在评论中所示,只需拨打一个电话即可轻松获得“2000以下”会员。愿力量与你同在。