【问题标题】:incrementing a score in redis sorted sets在 redis 排序集中增加分数
【发布时间】:2013-12-11 18:23:00
【问题描述】:

我想使用 redis 的排序集跟踪日常使用统计信息,其中分数将是时间戳,成员将是该特定统计信息的值(因为我想使用 zrange 来获取统计信息)

所以如果我有一个访问密钥

zadd "visits", "20131211", 1 # 这会将单次访问添加到今天 2013 年 12 月 11 日的日期

但是在其他访问中会发生什么?

如何增加会员的分数?

我觉得memberscore 的用途可能会混淆

【问题讨论】:

    标签: redis


    【解决方案1】:

    ZINCRBY

    文档中的示例:

    ZINCRBY visits 1 "20131211"
    

    此外,如果该成员尚不存在,它会与您传递的分数一起添加。 ZINCRBY in the Redis docs

    【讨论】:

    • 这就是我困惑的地方。zincrby 会增加成员的分数。所以在这种情况下,20131211 是分数还是成员?我上面写的 zadd 得分为 20131211
    • 操作数的顺序是ZINCRBY key increment member。我将在答案中添加链接。根据您使用的绑定,可能会有所不同。
    • 如果日期是member,则执行zrange 将返回日期而不是分数
    • 哇,我现在明白了。没有命令可以增加成员本身而不是分数,如果您想坚持使用该架构,您必须先手动查询它,然后设置新值。在这种情况下,您将不得不注意您的 stoftware 中的原子性。
    • 最简单的方法可能是增加一个键,例如stats:visits:20131211。然后,您可以在您的应用程序中循环您要查询的日期并为 redis 生成 MULTI 查询。如果你使用了一个很好的绑定,你将返回一个数组或列表或任何你可以通过将返回的值相加来减少的东西,忽略这些值为 NIL(不存在的键)
    猜你喜欢
    • 1970-01-01
    • 2016-01-28
    • 1970-01-01
    • 1970-01-01
    • 2016-10-22
    • 2018-01-26
    • 2021-09-19
    • 2022-01-12
    • 2014-06-05
    相关资源
    最近更新 更多