Redis:根据散列字段值从排序集中排除值

Redis:根据散列字段值从排序集中排除值,redis,set,sorted,Redis,Set,Sorted,我想知道是否有人可以提供一些关于如何使排序集生成更有效的建议 我正在从事一个项目,其中排名数据按小时计算并存储在数据库中。数据可以按成员性别、国家等进行过滤。大约有200万行需要处理,而且需要很长时间 我们希望采用更实时的方法,在Redis中存储/排序/过滤数据,并每天进行干净的重建 在我的原型中,我正在为每个可能的过滤器组合创建一个排序集,例如:leadboard.au.male、leadboard.au.female等。我已经编写了这个过程的脚本,但一旦处理了每个案例,就意味着创建了118个

我想知道是否有人可以提供一些关于如何使排序集生成更有效的建议

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

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

在我的原型中,我正在为每个可能的过滤器组合创建一个排序集,例如:leadboard.au.male、leadboard.au.female等。我已经编写了这个过程的脚本,但一旦处理了每个案例,就意味着创建了118个排序集

理想情况下,我希望每个成员都有一个单独的排名排序集和哈希集,包含他们的姓名、性别和国家。然后使用Redis仅返回基于用户定义过滤器的排序集值。(例如,只获得澳大利亚男性的排名)


这是否可能在Redis中以本机方式实现?

我建议您为所有成员保留一套排名:

leaderboard = { id1: score1, id2: score2, ... }
每种类型(性别、国家等)各一套:

然后,您执行以下操作:

或者,要获得非盟男性成员排行榜:

zinterstore leaderboard.au.male 3 leaderboard members.male members.au
您可以使用
权重
聚合
控制如何计算结果排序集的得分


如果您不想将结果集保留很长时间,那么您可以
使它们过期
并仅在不存在时构建一个新的集。

谢谢,这似乎是最灵活的解决方案。
zinterstore leaderboard.male 2 leaderboard members.male
zinterstore leaderboard.au.male 3 leaderboard members.male members.au