什么时候应该避免使用Redis HyperLogLog?为什么?

时间:2017-09-04 11:48:36

标签: algorithm redis hyperloglog

我对Redis HyperLogLog如何工作以及何时使用它有一些基本的想法 在使用它之前,我做了一个测试:我pfadd将一些连续的数字编辑到HLL条目(模仿用户ID),Redis很快给出了误报结果。确切地说,如果pfadd编号193到HLL条目,则会报告该条目中已存在编号202。你可以用redis-cli测试它:

127.0.0.1:6379> del ns
(integer) 0
127.0.0.1:6379> PFADD ns 193
(integer) 1
127.0.0.1:6379> PFADD ns 202
(integer) 0

我知道HyperLogLog是一种概率数据结构,但HLL是否容易给出这样的误报?我误解了什么吗?

1 个答案:

答案 0 :(得分:2)

  1. 您误解了PFADD的回复 - 它并不表示存在,而是数据结构中的内部寄存器是否发生了变化。
  2. 您也误解了HLL的使用 - 它估计设置基数(大小),而不是设置成员资格。
  3. 对于设置成员资格的类似(在概率意义上)数据结构,请检查布隆过滤器及其Redis实现,Rebloom(http://rebloom.io)。