【问题标题】:Redis: Excluding values from sorted set based on hash field valueRedis:根据哈希字段值从排序集中排除值
【发布时间】:2012-03-28 03:49:48
【问题描述】:

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

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

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

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

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

这可以在 Redis 中本地实现吗?

【问题讨论】:

    标签: redis set sorted


    【解决方案1】:

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

    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 它们,并且仅在不存在时构建新集。

    【讨论】:

    • 谢谢,这似乎是最灵活的解决方案。
    猜你喜欢
    • 2021-09-28
    • 1970-01-01
    • 1970-01-01
    • 2010-10-20
    • 1970-01-01
    • 2015-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多