Redis:排序并获得n个邻居密钥

时间:2013-11-28 19:14:06

标签: redis

假设我在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的新手,感谢您的帮助。

2 个答案:

答案 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 2d, c返回zrangebyscore test:key_sort -inf 25 limit 0 2