1、概念
一、redis在2.8.9版本添加了HyperLogLog结构。
二、redis HyperLogLog是用来作基数统计的算法,HyperLogLog的优势是:在输入元素的数量或者体积很是很是大时,计算基数所需的空间老是固定的、而且使很小的。
三、在redis里面,每一个HyperLogLog键只须要花费12kb内存,就能够计算接近2^64个不一样元素的基数。这和计算基数时,元素越多耗费内存就越多的集合造成鲜明对比。
四、可是,由于HyperLogLog只会根据输入元素来计算基数,而不会存储输入元素自己,因此HyperLogLog不能像集合那样,返回输入的各个元素。redis
什么是基数
好比数据集{1,3,5,7,5,7,8},那么这个数据集的基数集为{1,3,5,7,8},基数(不重复元素)为5.基数估计就是在偏差可接受的范围内,快速计算基数。算法
2、HyperLogLog相关命令spa
- 命令名称: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