Redis:根据哈希字段值从排序集中排除值

Bob*_*ano 6 sorted set redis

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

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

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

在我的原型中,我正在为每个可能的过滤器组合创建一个有序集合,例如:leaderboard.au.male,leaderboard.au.female等.我编写了这个过程但是一旦你处理完每个案例就意味着有118个排序集创建.

理想情况下,我希望为每个包含其名称,性别和国家/地区的成员设置一个排名排序集和哈希集.然后使用Redis仅根据用户定义的过滤器返回已排序的设置值.(例如,只获得澳大利亚男性的排名).

这可以在Redis中原生吗?

Lin*_*iel 5

我建议你保留一套所有成员的排名:

leaderboard = { id1: score1, id2: score2, ... }
Run Code Online (Sandbox Code Playgroud)

每种类型(性别、国家等)都有一组:

members.male = { id1, id2, ... }
members.au = { id2, id3, ... }
Run Code Online (Sandbox Code Playgroud)

然后,你做一个ZINTERSTORE

zinterstore leaderboard.male 2 leaderboard members.male
Run Code Online (Sandbox Code Playgroud)

或者,要获取男性 AU 成员的排行榜:

zinterstore leaderboard.au.male 3 leaderboard members.male members.au
Run Code Online (Sandbox Code Playgroud)

WEIGHTS您可以控制如何使用和计算结果排序集的评分AGGREGATE

如果您不想长期保留结果集,则可以将EXPIRE它们保留下来,并且仅在新集不存在时才构建新集。