Redis排序集,获取得分小于x的所有成员

时间:2012-11-27 12:40:30

标签: redis

在Redis中,如何获取得分低于x的所有成员? 做这项任务的时间复杂度是多少?

1 个答案:

答案 0 :(得分:8)

您可以使用ZRANGEBYSCORE redis命令。

e.g。成绩低于4的成员

zadd myset 1 "one"
zadd myset 2 "two"
zadd myset 3 "three"
zadd myset 5 "five"
zadd myset 6 "six"

ZRANGEBYSCORE myset -inf 4

结果:

1) "one"
2) "two"
3) "three"

分数大于4

ZRANGEBYSCORE myset 4 +inf

结果:

1) "five"
2) "six"

关于复杂性,由于redis文档,它是O(log(N)+ M)

编辑: 第二个例子

假设我们有一个在线游戏的记分牌,我们将其存储在redis的有序集中。 以下命令创建此测试

zadd scoreboard 101 "John" 333 "Mary" 323 "Nick" 900 "Steve" 901 "Sam" 333 "Mike"

有资格进入下一轮的球员是得分低于330的球员。为了找到这些球员,我们运行以下命令。

ZRANGEBYSCORE scoreboard -inf 330

这将导致2名球员(约翰和尼克)

1) "John"
2) "Nick"

进一步解释一下这个命令: ZRANGEBYSCORE:redis命令,请查看文档 记分牌:我创建的排序集 -inf:是我命令的最低价格 330:我命令的最高价格

它的作用是找到从-infinite到330的所有成员,我理解为330及以下的所有成员。

我希望我帮助过:)