1

我在 Redis 中有一个有序集(我实际上使用的是 python 客户端https://github.com/andymccurdy/redis-py),例如:

zadd myset 1 key1
zadd myset 1 key2
zadd myset 1 key3
zadd myset 0 key4

请注意,3 个键具有相同的分数。

使用 ZRANGE,我想获得前 2 个条目(即最低分数)。“key4”将始终是第一个结果,因为它具有较低的值,但我希望在关系之间随机选择第二个返回值:key1、key2、key3。ZRANGE 实际上按照它们被索引的顺序返回键:“keys1”总是我的第二个结果:

zrange myset 0 -1 WITHSCORES
1) "key4"
2) "0"
3) "key1"
4) "1"
5) "key2"
6) "1"
7) "key3"
8) "1"

任何想法?谢谢,J。

应 Linus G Thiel的请求,以下是有关我的用例的更多详细信息:

我想使用 zsets 来执行一个简单的排名系统。我有一个项目列表,每个项目都有一个代表项目相关性的分数。对于我的系统的冷启动,大多数分数都是相同的(即0),我想在分数相同的项目中随机选择。否则,我将始终返回完全相同的字典顺序,这将在系统中引入偏差。

您提出的解决方案,为每个重复的分值使用一个特定的集合将起作用。我会试一试。

谢谢,

4

0 回答 0