在Redis中查找特定数字的上限或下限

时间:2018-01-09 08:19:57

标签: redis

例如,我在Redis中有一个集合

5 7 11 15 19 2 1

我想在Redis中找到12的上限或下限。 在此示例中,它们是1511

我怎样才能有效地做到这一点。

我可以使用setordered set

谢谢!

1 个答案:

答案 0 :(得分:0)

我可以想到两种方式,它们都不完美。

如果它们都在set中,您可以检查($r->sIsMember())该号码12,然后反复上下移动,直到找到每个匹配项。这是很好,如果你走这条路,我建议使用LUA脚本以避免吨back-and-forth

第二,将它们放入sorted set作为分数的主键。然后,您将zRangeByScore()并获取已排序集合中该成员的zRank(),然后zRange()以获取之前和之后的值。我会在这里做到这一点:

将它们添加到有序集合中:

zadd mysset 5 "one"
zadd mysset 7 "two"
zadd mysset 11 "three"
zadd mysset 15 "four"
zadd mysset 19 "five"
zadd mysset 2 "six"
zadd mysset 1 "seven"

动态添加一个以供参考

zadd mysset 12 "center"

现在获得reference的排名:

zRank mysset "center"    
// 6 in this case

现在获得withscores上方和下方的范围:

zRange mysset 7 7 WITHSCORES
zRange mysset 5 5 WITHSCORES
// "four" 15
// "three" 11
祝你好运,玩得开心!

编辑哦,是的,删除参考号:

zrem mysset "center"