先说明一下,HyperLogLog是一种算法,并不是由redis创造了它。
Redis 在 2.8.9 版本添加了 HyperLogLog 结构(简介HLL),用于做基数统计,其使用算法HyperLogLog使得在数量级特别大的情况下占用空间很小。说白了就是在大数据量级的情况下能够在很小的空间中进行元素去重统计。如果使用我们平常的数据结构比如set,HashMap,等,虽然也可以实现去重统计的工作,但是当数据量上升到一定级别之后,其占用的空间也是非常的大。
需要注意的是HyperLogLog算法的去重计数方案并不精确,当然不是特别不精确,标准误差只有0.81%
当然HyperLogLog虽说占据空间小,但也不是不占空间,它需要占据一定12k存储空间,所以如果我们的统计量可能比较小,使用HyperLogLog可能就是大材小用了,但是如果百万级、千万级,那节省的空间就大的大了去了。
基数:我理解就是一个数据集中不重复的元素个数。
一、基本命令
1)添加指定元素到 HyperLogLog 中
PFADD key element [element ...]
2)返回给定 HyperLogLog 的基数估算值。
PFCOUNT key [key ...]
若填写多个key,则返回每个key对应HyperLogLog的基数估值之和。
3)将多个 HyperLogLog 合并为一个 HyperLogLog
PFMERGE destkey sourcekey [sourcekey ...]
PFMERGE 命令将多个 HyperLogLog 合并为一个 HyperLogLog ,合并后的 HyperLogLog 的基数估算值是通过对所有 给定 HyperLogLog 进行并集计算得出的。
二、使用场景
1.统计UV,PV。
UV(Unique visitor):是指从00:00-24:00内相同的客户端的单次或者多次访问标记为一次访问。
PV(Page View):即页面浏览量或点击量,相同客户端的每次访问都会使得统计量+1.
关于UV和PV的解释https://www.zhihu.com/question/20448467
2.统计在线用户数量
三、HyperLogLog实现原理
四、参考链接
https://juejin.im/post/5c7900bf518825407c7eafd0#heading-1
https://blog.csdn.net/weixin_42627385/article/details/140930667
http://content.research.neustar.biz/blog/hll.html
https://developer.volcengine.com/articles/7065609735982022664