先说明一下,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的解释
UV(Unique visitor)是指通过互联网访问、浏览这个网页的自然人。访问您网站的一台电脑客户端为一个访客。00:00-24:00内相同的客户端只被计算一次。
一天内同个访客多次访问仅计算一个UV。
IP(Internet Protocol)独立IP是指访问过某站点的IP总数,以用户的IP地址作为统计依据。00:00-24:00内相同IP地址之被计算一次。
UV与IP区别:如:你和你的家人用各自的账号在同一台电脑上登录新浪微博,则IP数+1,UV数+2。由于使用的是同一台电脑,所以IP不变,但使用的不同账号,所以UV+2
PV(Page View)即页面浏览量或点击量,用户每1次对网站中的每个网页访问均被记录1个PV。用户对同一页面的多次访问,访问量累计,用以衡量网站用户访问的网页数量。
VV(Visit View)用以统计所有访客1天内访问网站的次数。当访客完成所有浏览并最终关掉该网站的所有页面时便完成了一次访问,同一访客1天内可能有多次访问行为,访问次数累计。
PV与VV区别:如:你今天10点钟打开了百度,访问了它的三个页面;11点钟又打开了百度,访问了它的两个页面,则PV数+5,VV数+2.PV是指页面的浏览次数,VV是指你访问网站的次数。
参考链接
https://www.zhihu.com/question/20448467
三、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