【问题标题】:Aggregating values on Redis在 Redis 上聚合值
【发布时间】:2014-04-12 19:46:36
【问题描述】:

我正在使用 Redis 跟踪每个房间、每个建筑物的事件访问次数, 我需要在这样的层次结构中显示这些。可以查看每个房间的所有事件,也可以缩小并获取每个建筑物的事件汇总。

每个建筑物都有唯一的名称,例如PRH 和建筑物中的每个房间都有一个唯一的编号,例如101, 212.

请有人就存储访问事件并将它们聚合到 Redis 的架构和最佳方法提供建议。

例如,我的层次结构是 PRH:101:5、PRH:212:6,我希望能够有效地显示:101 (5)、212 (6) 和 PRH (11)。

【问题讨论】:

    标签: redis


    【解决方案1】:

    我将把我的答案分成两部分,因为一些新的 Redis 功能即将发布,但还没有在稳定版中。

    Redis 2.8.8 及更早版本

    使用Hash Set redis 数据类型,以及HINCRBYHGET

    递增计数器时,请执行以下操作:

    HINCRBY building PRH 1
    HINCRBY room:PRH 101 1
    # The hash set nor the member doesn't have to exist beforehand.
    # If you need atomicity, bundle these commands in a Lua script. Parameterized, avoid Lua SHA1 changes to minimize Lua server-side mem usage.
    # Alternative for atomicity: use MULTI+EXEC
    

    经过几次增量后,您可以在两个级别上进行查询:

    HGET building PRH 
    # this gives you after 10 increments: PRH=10
    
    
    HGET room:PRH 101
    # this gives you after 5 increments to this room: PRH:101=5
    

    Redis 2.9.x(未来)

    如果数字很大,而且是估计值,加上 0.81% 的标准误差是可以接受的,您可以使用高效的HYPERLOGLOG 结构/算法。见PFCOUNT

    如果您想将范围与字典排序/查询结合使用,请查看ZRANGEBYLEX

    希望这会有所帮助,TW

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-07
      • 2020-03-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多