在Redis中找到前N个值最高的键

hts6caw3  于 2022-12-03  发布在  Redis
关注(0)|答案(2)|浏览(153)

我有一个user_id: rating结构的Redis数据库,我需要得到最高评级(值)的N个用户,如:

u_345: 198
u_144: 180
u_267: 179

我的想法是:取一个所有键的列表,并为每个键获取其值(db.mget(db.keys())),然后按值排序并获取第一个N。有更好的方法吗?
我使用的是redis-py Python库,但最主要的是得到正确的算法(或者现成的解决方案)。

eoigrqb6

eoigrqb61#

看起来您应该遵循使用Sorted Set作为辅助索引的模式。
请参阅:https://redis.io/topics/indexes

iibxawm4

iibxawm42#

您应该使用ZRANGEhttps://redis.io/commands/zrange/)。
使用您的数据集,您可以使用以下方法:

ZADD ratingindex 198 u_345
ZADD ratingindex 180 u_144
ZADD ratingindex 179 u_267

然后,要检索具有最高值的2(或N)个键,应用途:
ZRANGE ratingindex 0 1 withscores rev
此命令将检索两个密钥(从0到1),其值(withscores)从ratingindex按从高到低(rev)的顺序排列。
最后你只需要修改这个直接命令到redis-py库。
希望能有所帮助。

相关问题