使用Redis排序集维护最高用户(按得分)的上限列表

时间:2018-06-30 21:41:35

标签: redis

我想维护一个我正在执行的python项目中的前100名用户(按得分)的列表。我认为redis sorted sets可以达到上述目的。

但是,我不想保留曾经得分的每个用户的记录。那将是一个相当大的sorted set,我只希望按综合得分排在前100名用户之列。

仍然在redis的范围内,有没有办法使用sorted sets来实现这一目标?

我知道在使用列表的情况下可以执行lpushltrim,但这是一种更简单的情况,不需要按score进行排序。那么我该怎么做呢?

我知道这个问题也可以在redis sorted sets的范围之外回答,但是redis sorted sets是一个很好的工具,因此,举例说明使用它们的答案将非常适合我我试图实现。

先谢谢了。

2 个答案:

答案 0 :(得分:2)

您可以这样做,但是需要进行一些设置才能正确管理Top-100排序集。

该算法在https://www.cs.berkeley.edu/~satishr/cs270/sp11/rough-notes/Streaming-two.pdf中进行了说明(请参阅第一种算法)。我已经将它作为Redis模块(topk-https://github.com/RedisLabsModules/topk)实现了一段时间,但是它也应该在不依靠模块API的情况下也是可行的。

答案 1 :(得分:0)

Top-K是RedisBloom中的全新数据类型。 它具有简单的命令集,并且非常精简。在某些基准测试中,它比排序集所需的速度快五倍,占用的内存不到1%。 您可以here对其进行了解。

Redis已发布了有关Top-K解决方案的new blog