【发布时间】:2016-01-07 19:25:34
【问题描述】:
我使用 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}
有什么建议、想法或替代方案吗?
【问题讨论】:
标签: redis