使用Redis SORTED SET获得用户朋友最高评分的最佳方式

时间:2016-08-10 14:30:59

标签: redis sortedset

我有SORTED SET user_id:游戏中每个级别的评级(2000+级别)。集合中有2 000 000个用户。 我需要创建2个评分 - 第一个 - 所有用户前100名,第二个 - 前5名朋友每个玩家

首先可以使用ZRANGE轻松解决

但是第二个存在问题,因为平均而言 - 每个用户都有500个朋友

有两种方式:

1)我可以使用ZSCORE \ ZRANK执行500个请求,并通过后端对用户进行排序(请求太多,性能不佳)

2)我可以为每个用户创建SORTED SET,并在每次用户更新时在后台更新。 (更多数据,更多内容,更复杂)

可能是我错过了其他选项吗?

1 个答案:

答案 0 :(得分:3)

我相信您的主要关注点应该是您的数据模型。每个用户都有他的朋友排序吗?

我会推荐这样的东西:

用户:{id}:朋友的价值观为朋友的ids 用户:记分板值作为用户ID并评分为评分                            每个

作为您第一个问题的答案,您可以考虑使用管道,这将大大减少请求的数量,然而您仍然需要处理排序结果。

如果您有前面描述的两个有序集合,那么问题的答案就更好了: 使用" zinterstore"获取两者之间的交集。命令并将结果存储在仅为此目的创建的有序集中。因此,新的排序集将包含所有用户的朋友ID,其评级为分数(这里需要小心,因为您需要指定新排序集的分数,它可以是得分的SUM,MIN或MAX)。 参考:http://redis.io/commands/zinterstore

此时使用简单的" zrevrangebyscore"并指定限制,将利用您要查找的排序结果。