应该如何管理Redis的订购和限制大小的收集?

时间:2015-10-09 18:43:26

标签: redis

我使用Redis 排序集保留排行榜,因此我使用ZREVRANGEBYSCORE来获得前10位用户。

排序集中的我的键看起来像user-id:xxxx,它的值是用户得到的点,整数。

当我检索最高的10个用户(ZREVRANGEBYSCORE general-ranking +inf -inf LIMIT 0 10)时,我还需要显示这些用户的数据,该信息存储在MongoDB的Users集合中。

因此,我 无法 前往MongoDB,要求每个排行榜更改前10位用户数据。那可能有点过头了,所以我想我可以存储最新的30或50个用户数据(给出一个偏移),当新值出现时,它会替换任何值,如果需要,以保持固定的大小。我认为这样可以减少针对MongoDB的操作次数并提高性能。

所以我知道Redis中有列表,哈希和集合,但我不确定实现这一点的数据类型和命令的最佳组合是什么,更重要的是,它们应该是字符串(集合和列表的情况),它们似乎不具备订单能力。我只认为修剪可能有助于保持固定的大小。

我需要什么,概念上

假设我存储了一个2个大小的用户列表,所以我得到了:

  • {user: "Akira", points: 10}
  • {user: "Luca": points: 3}

如果我然后添加{user: "Diego", points: 9248},那将删除3个点的元素,列表将是:

  • {user: "Diego": points: 9248}
  • {user: "Akira", points: 10}

任何建议,想法或替代方案?

1 个答案:

答案 0 :(得分:2)

首先,使用ZREVRANGE general-rankings 0 9取回前10名。

其次,在每ZADD之后,只需执行ZREMRANGEBYRANK general-rankings 0 -10即可将其限制在前10位。