我使用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}
任何建议,想法或替代方案?
答案 0 :(得分:2)
首先,使用ZREVRANGE general-rankings 0 9
取回前10名。
其次,在每ZADD
之后,只需执行ZREMRANGEBYRANK general-rankings 0 -10
即可将其限制在前10位。