首页 > 解决方案 > 实现redis排行榜

问题描述

我已经分类了用于我作为排行榜的集合。

我想从排行榜中只检索 N 个元素。

例如,我的排序集包含 100 万条记录。我的 userId(排序集中的值)是 123,得分为 100

我只想在我的用户上方获得 10 个用户,在我的用户下方获得 10 个用户。

目前,我的逻辑是这样的:

  1. 我打电话给 ZRANK 来获取我的用户排名。
  2. 我打电话给 ZRANGE [key] [USERRANK - 10] [USERRANK + 10]

现在,我有了想要从 Redis 检索的分数和用户,但我没有这些用户的排名。

有没有办法也获得排名?

我不想为每个用户调用 ZRANK。

标签: databaseredis

解决方案


不,没有 Redis 方式可以做到这一点,但是由于您已经知道用户的等级,您可以将其用作您的“基础”,根据ZRANGE's上成员的位置减少/增加回复。由于它是最多 21 个成员的绑定范围,因此这是一个简单的计算,可以在客户端以恒定的复杂性完成。


推荐阅读