一、概念
1、redis在2.8.9版本添加了HyperLogLog结构。
2、redis HyperLogLog是用来做基数统计的算法,HyperLogLog的优点是:在输入元素的数量或者体积非常非常大时,计算基数所需的空间总是固定的、并且使很小的。
3、在redis里面,每个HyperLogLog键只需要花费12kb内存,就可以计算接近2^64个不同元素的基数。这和计算基数时,元素越多耗费内存就越多的集合形成鲜明对比。
4、但是,因为HyperLogLog只会根据输入元素来计算基数,而不会存储输入元素本身,所以HyperLogLog不能像集合那样,返回输入的各个元素。
什么是基数
比如数据集{1,3,5,7,5,7,8},那么这个数据集的基数集为{1,3,5,7,8},基数(不重复元素)为5.基数估计就是在误差可接受的范围内,快速计算基数。
二、HyperLogLog相关命令
- 命令名称:pfadd
- 语法:pfadd key element [element……]
- 功能:
- 将任意数量的元素添加到指定的HyperLogLog里面。
- 作为这个命令的副作用,HyperLogLog内部可能会被更新,以便反映一个不同的唯一元素估计数量(也即是集合的基数)。
- 返回值:
- 整数回复:如果HyperLogLog的内部储存被修改了,那么返回1,否则返回0.
- 命令名称:pfcount
- 语法:pfcount key [key……]
- 功能:
- 当pfcount命令作用于当个键时,返回储存在给定键的HyperLogLog的近似基数,如果键不存在,那么返回0。
- 当pfcount命令作用于多个键时,返回所有给定HyperLogLog的并集的近似基数,这个近似基数是通过将所有给定HyperLogLog合并至一个临时HyperLogLog来计算得出的。
- 返回值:
- 整数回复:给定HyperLogLog包含的唯一元素的近似数量。
- 命令名称:pfmerge
- 语法:pfmerge destkey sourcekey [sourcekey……]
- 功能:
- 将多个HyperLogLog合并(merge)为一个HyperLogLog,合并后的HyperLogLog的基数接近于所有输入HyperLogLog的可见集合(observed set)的并集。
- 返回值:
- 返回OK