1

我对 Redis HyperLogLog 如何工作以及何时使用它有一些基本的想法。
在使用它之前,我做了一个测试:我pfadd在 HLL 条目中添加了一些连续的数字(以模仿用户 ID),Redis 很快给出了误报结果。确切地说,如果您将pfadd193 编号到 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 不会太容易给出这样的误报吗?我是不是误会了什么?

4

1 回答 1

4
  1. 您误解了PFADD的回复 - 它并不表示存在,而是表示数据结构中的内部寄存器是否已更改。
  2. 您还误解了 HLL 的用途——它估计集合基数(大小),而不是集合成员。

对于确实设置成员资格的类似(在概率意义上)数据结构,请检查 Bloom Filters 及其 Redis 实现 Rebloom ( http://rebloom.io )。

于 2017-09-04T12:44:22.297 回答