Redis之HyperLogLog

基于HyperLogLog算法 : 极小空间完成独立数量统计,本质还是字符串

127.0.0.1:6379> pfadd 2019:uuid:id 'u1' 'u2' 'u3'
(integer) 1
127.0.0.1:6379> type 2019:uuid:id
string

PFADD key element [element ...]

将除了第一个参数以外的参数存储到以第一个参数为变量名的HyperLogLog结构中。这个命令的一个副作用是它可能会更改这个HyperLogLog的内部来反映在每添加一个唯一的对象时估计的基数(集合的基数)。如果一个HyperLogLog的估计的近似基数在执行命令过程中发了变化, PFADD返回1,否则返回0,如果指定的key不存在,这个命令会自动创建一个空的HyperLogLog结构(指定长度和编码的字符串)。如果在调用该命令时仅提供变量名而不指定元素也是可以的,如果这个变量名存在,则不会有任何操作,如果不存在,则会创建一个数据结构(返回1)。

127.0.0.1:6379> pfadd 2019:uuid:id 'u1' 'u2' 'u3'
(integer) 1
127.0.0.1:6379> pfadd 2019:uuid:id 'u1' 'u2' 'u3'
(integer) 0

pfcount key [key..]

当参数为一个key时,返回存储在HyperLogLog结构体的该变量的近似基数,如果该变量不存在,则返回0。当参数为多个key时,返回这些HyperLogLog并集的近似基数,这个值是将所给定的所有key的HyperLoglog结构合并到一个临时的HyperLogLog结构中计算而得到的。

127.0.0.1:6379> pfcount 2019:uuid:id
(integer) 3

pfmerge

将多个 HyperLogLog 合并(merge)为一个 HyperLogLog , 合并后的 HyperLogLog 的基数接近于所有输入 HyperLogLog 的可见集合(observed set)的并集。合并得出的 HyperLogLog 会被储存在目标变量(第一个参数)里面, 如果该键并不存在, 那么命令在执行之前, 会先为该键创建一个空的。

127.0.0.1:6379> pfadd 2018:uuid:id 'u1' 'u2' 'u3'
(integer) 1
127.0.0.1:6379> pfadd 2019:uuid:id 'u1' 'u2' 'u4'
(integer) 1
127.0.0.1:6379> pfmerge age 2019:uuid:id 2018:uuid:id
OK
127.0.0.1:6379> pfcount age
(integer) 4

注意事项

1)错误率 : 0.81%

2)不能获取单条数据

原文地址:https://www.cnblogs.com/yhq-qhh/p/10249204.html