【问题标题】:Return value of PFADD in RedisRedis中PFADD的返回值
【发布时间】:2014-06-24 16:27:06
【问题描述】:

根据Redis documentation on PFADD command

返回值 整数回复,具体来说: 如果至少 1 个 HyperLogLog 内部寄存器被更改,则为 1。否则为 0。

谁能解释以下两点?

  1. 这是否意味着如果计数器确实增加了 1,PFADD 将返回“1”?是否保证在运行 PFADD 后,新的 PFCOUNT 将为PFCOUNT(before) + output of PFADD?换句话说,单线程客户端能否仅使用 PFADD 的输出来跟踪计数?
  2. 当 PFADD 返回“0”或“1”时,它们是否分别转换为“缓存命中”和“缓存未命中”?

【问题讨论】:

    标签: redis hyperloglog


    【解决方案1】:

    这是否意味着如果计数器确实增加了 1,PFADD 将返回“1”?

    没有。

    返回值纯粹是boolean,即它只表示是否 底层 HyperLogLog 已修改

    是否保证运行PFADD后,新的PFCOUNT会是PFCOUNT(before) + output of PFADD

    不,因为PFADD 的输出不代表计数(见上文)。

    话虽如此,您可能希望使用PFADD 的输出作为调用的触发器 PFCOUNT 再次,正如antirezoriginal blog post 中所解释的那样:

    这对用户来说很有趣,因为当我们添加元素时 元素实际修改某些寄存器的概率会降低。 API 能够提供有关 a 新的基数可用允许程序不断添加 元素和仅在一个新元素时检索近似基数 可用

    最后:

    当 PFADD 返回“0”或“1”时,它们是否分别转换为“缓存命中”和“缓存未命中”?

    没有。如上所述,它仅表示有一个新的基数可用

    【讨论】:

    • 后续澄清:是否可以假设当 PFADD 返回 1(即修改了状态寄存器)时,添加了 99% 准确率的新项目?
    猜你喜欢
    • 2016-07-02
    • 1970-01-01
    • 2023-04-05
    • 2012-07-03
    • 2013-03-24
    • 1970-01-01
    • 2015-02-15
    • 2015-02-19
    • 2017-06-26
    相关资源
    最近更新 更多