Redis:基于哈希字段值从有序集合中排除值

7

我想知道有没有人能提供一些关于如何使排序集生成更加高效的建议?

我正在开发一个项目,其中排名数据是按小时计算并存储在数据库中的。这些数据可以按照成员性别、国家等进行过滤。需要处理大约200万行数据,处理时间很长。

我们希望采用更实时的方法,在Redis中存储/排序/过滤数据,并进行每日清理重建。

在我的原型中,我为每个可能的过滤器组合创建了一个排序集,例如:leaderboard.au.male,leaderboard.au.female等。我已经编写了脚本来完成这个过程,但是一旦涉及到每种情况,就意味着会创建118个排序集。

理想情况下,我希望有一个单一的排名排序集,以及包含每个成员姓名、性别和国家的哈希集。然后仅使用Redis根据用户定义的过滤器返回排序集值(例如:仅获取来自澳大利亚的男性的排名)。

这在Redis中是否可以本地实现?

1个回答

5
我建议您保留一个包含所有成员排名的集合:

leaderboard = { id1: score1, id2: score2, ... }

对于每种类型(性别、国家等),都需要一个集合:

members.male = { id1, id2, ... }
members.au = { id2, id3, ... }

接下来,你需要执行一个ZINTERSTORE操作:

zinterstore leaderboard.male 2 leaderboard members.male

或者,要获取男性AU成员的排行榜:
zinterstore leaderboard.au.male 3 leaderboard members.male members.au

你可以使用WEIGHTSAGGREGATE来控制排序结果的评分方式。
如果你不想长时间保留结果集,可以使用EXPIRE命令,并在需要时创建新的结果集。

谢谢,这似乎是最灵活的解决方案。 - Bobby Sciacchitano

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接