假设我在Redis中有这些对:
1237.56 "John"
1224.59 "Robert"
1213.34 "Mahmoud"
1242.90 "George"
1020.11 "Mary"
1723.09 "Jay"
1589.77 "Khan"
1106.62 "Albert"
键始终为十进制数。如果提供了一个数字,我想在两个方向上得到两个最接近数字的键。
例如,如果我搜索1242
的邻居,则结果集应该具有:
1224.59 "Robert"
1237.56 "John"
1242.90 "George"
1589.77 "Khan"
这可能吗?我还是Redis的新手,感谢您的帮助。
答案 0 :(得分:3)
是的,没有同一时间。
为什么是?唯一一种redis数据类型 - SORTED SET允许您根据小数获取值范围。因此,使用ZRANGEBYSCORE,您可以按分数范围获取值。
ZRANGEBYSCORE theKey 1220 1600
为您提供所需的数据集。
为什么不?在您的问题中,您询问有关得分的邻居。 ZRANGEBYSCORE可以获得从最小分数到最大分数的值,但不能获得“得到X值少于给定”或“X值很大然后给出”。
答案 1 :(得分:1)
使用带有limit参数的zrangebyscore
可以 。您将需要进行两次查询 - 一次是为了获得每边的邻居。
例如,如果您希望获得分数低于n
的{{1}},则查询如下所示:
score
zrangebyscore KEY <SCORE> +inf limit 0 <N>
得分高于此类:
n
假设您已按此排序集zrevrangebyscore KEY +inf <SCORE> limit 0 <N>
:
test:key_sort
然后"a": 10
"b": 20
"c": 30
"d": 40
"e": 50
返回zrevrangebyscore test:key_sort +inf 25 limit 0 2
,d, c
返回zrangebyscore test:key_sort -inf 25 limit 0 2