我有一个user_id: rating结构的Redis数据库,我需要得到最高评级(值)的N个用户,如:
user_id: rating
u_345: 198 u_144: 180 u_267: 179
我的想法是:取一个所有键的列表,并为每个键获取其值(db.mget(db.keys())),然后按值排序并获取第一个N。有更好的方法吗?我使用的是redis-py Python库,但最主要的是得到正确的算法(或者现成的解决方案)。
db.mget(db.keys())
eoigrqb61#
看起来您应该遵循使用Sorted Set作为辅助索引的模式。请参阅:https://redis.io/topics/indexes
iibxawm42#
您应该使用ZRANGE(https://redis.io/commands/zrange/)。使用您的数据集,您可以使用以下方法:
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库。希望能有所帮助。
ZRANGE ratingindex 0 1 withscores rev
withscores
ratingindex
rev
2条答案
按热度按时间eoigrqb61#
看起来您应该遵循使用Sorted Set作为辅助索引的模式。
请参阅:https://redis.io/topics/indexes
iibxawm42#
您应该使用
ZRANGE
(https://redis.io/commands/zrange/)。使用您的数据集,您可以使用以下方法:
然后,要检索具有最高值的2(或N)个键,应用途:
ZRANGE ratingindex 0 1 withscores rev
此命令将检索两个密钥(从0到1),其值(
withscores
)从ratingindex
按从高到低(rev
)的顺序排列。最后你只需要修改这个直接命令到redis-py库。
希望能有所帮助。