HyperLogLog并不是一种新的数据结构(实际类型为字符串类型),而是一种基数算法,通过HyperLogLog可以利用极小的内存空间完成独立总数的统计,数据集可以是IP、Email、ID等。
HyperLogLog提供了三种命令:
目录
pfadd
1.语法
pfadd key element[element...]
2.解析
将任意数量的元素添加到指定的HyperLogLog里面。
作为这个命令的副作用,HyperLogLog内部可能会被更新,以便反映一个不同的唯一元素估计数量(集合的基数)
如果HyperLogLog估计的近似基数在命令执行之后出现了变化,那么该命令返回1,否则返回0.如果命令执行时给定的键不存在,那么程序将先创建一个空的HyperLogLog结构,然后再执行命令。
调用pfadd命令时可以之给定键名而不给定元素:
如果给定键已经是一个HyperLogLog,那么这种调用不会产生任何效果。
但如果给定的键不存在,那么命令会创建一个空的HyperLogLog,并向客户端返回1
3.返回值
整数回复:如果HyperLogLog的内部储存被修改了,那么返回1,否则返回0.
4.例子:
pfadd lan php python rudy
pfcount lan
pfadd lan php //php已经存在 不会进行更新
pfcount lan //数量没有变化
pfadd lan golang //添加一个不存在的元素
pfcount lan
pfcount
1.语法
pfcount key [key...]
2.解析
当pfcount命令用于单个键时,返回储存在给定键的HyperLogLog的近似基数,如果键不存在,那么返回0.
当pfount命令用于多个键时,返回所有给定HyperLogLog的并集的近似基数,这个近似基数是通过将所有给定HyperLogLog合并至一个临时HyperLogLog来计算得出的。
命令返回的可见集合基数并不是精确值,而是一个带有0.81%标准错误的近似值。
3.返回值:
整数回复:给定HyperLogLog包含的唯一元素的近似数量。
4.例子:
pfadd lan php python rudy
pfcount lan
pfadd 2019_06_06:unique:ids "uuid-1" "uuid-2" "uuid-3" "uuid-4"
pfcount 2019_06_06:unique
pfadd 2019_06_06:unique:ids "uuid-1" "uuid-2" "uuid-3" "uuid-90"
pfcount 2019_06_06:unique:ids
pfmerge
1.语法
pfmerge destkey sourcekey [sourcekey...]
2.解析
将多个HyperLogLog合并为一个HyperLogLog,合并后的HyperLogLog的基数接近于所有输入HyperLogLog的可见集合的并集。
合并得出的HyperLogLog会被储存在destkey键里面,如果键并不存在,那么命令在执行之前,会先为该键创建一个空HyperLogLog.
3.返回值:
字符串回复:返回OK
4.例子:
pfadd lan php python rudy
pfadd lan_1 golang javascript
pfmerge lan_2 lan_1 lan
pfcount lan_2