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

时间:2012-03-28 03:49:49

标签: redis set sorted

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

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

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

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

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

这可以在Redis中原生吗?

1 个答案:

答案 0 :(得分:4)

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

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

每种类型(性别,国家等)的集合:

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

然后,你做ZINTERSTORE

zinterstore leaderboard.male 2 leaderboard members.male

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

zinterstore leaderboard.au.male 3 leaderboard members.male members.au

您可以控制如何使用WEIGHTSAGGREGATE计算得到的排序集的评分。

如果您不想长时间保留结果集,那么可以EXPIRE它们,并且只有在它不存在时才构建新集。