例如,我在Redis中有一个集合
5 7 11 15 19 2 1
我想在Redis中找到12
的上限或下限。
在此示例中,它们是15
和11
。
我怎样才能有效地做到这一点。
我可以使用set
或ordered set
谢谢!
答案 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"