根据Redis documentation on PFADD command
返回值
整数回复,具体如下:
如果至少有一个hyperloglog内部寄存器被更改,则返回1。否则为0。
有人能解释一下以下两点吗?
这是否意味着如果计数器真的增加了1,pfadd将返回“1”?是否保证在运行pfadd之后,新的pfcount将PFCOUNT(before) + output of PFADD?换句话说,单线程客户机能否仅使用pfadd的输出来跟踪计数?
当pfadd返回“0”或“1”时,它们是否分别转换为“缓存命中”和“缓存未命中”?

最佳答案

这是否意味着如果计数器真的增加了1,pfadd将返回“1”?
不。
返回值是纯布尔值,即它只指示
已修改基础超日志。
是否保证在运行PFADD之后,新的PFCOUNT将是PFCOUNT(before) + output of PFADD
不,因为PFADD的输出不代表计数(见上文)。
也就是说,您可能希望使用PFADD的输出作为调用
再次,正如antirez中的original blog post所解释的:
这对用户来说很有趣,因为当我们添加元素时
元素实际修改某个寄存器的概率降低。
事实上,api能够提供关于
新基数可用,允许程序连续添加
元素并仅当新的基数
有空。
最后:
当pfadd返回“0”或“1”时,它们是否分别转换为“缓存命中”和“缓存未命中”?
不。如上所述,它只表示有新的基数可用。

10-05 20:11