场景引入:
两个概念:
- UV:全程Unique Visitor,也叫独立访客量,是指通过互联网访问,浏览这个网页的自然人。1天内同一个用户多次访问该网站,只记录一次。
- PV:全称PageView,也叫页面访问量或点击量,用户每次访问网站的一个页面,记录一次pv,用户多次打开页面,则记录多次pv。往往用来衡量网站的流量
UV统计izai服务端做会比较麻烦,因为要判断该用户是否已经统计过了,需要将统计过的用户信息保存。但是如果每个访问的用户都保存到Redis中,数据量会非常恐怖。
HyperLogLog用法
Hyperlogiog HLL是以L0g具法派率具法,用于定大的集合的星数而不需要存储其有值,关法原大家参考: https://juejin.cn/post/6844903785744056333#heading-0
Redis中的HLL是基于stimng结构实现的,单个HL的内存永远小16kb,内存占用的今人发指!作为价,其现量结果是部率性的,有小0.81 %误差,不对于UV统计来说,这完全可以忽路
实现UV统计
对于 HyperLogLog来说,天然的支持唯一性的数据,例如添加多个相同的id,那么只会存在一个
总结
HyperLogLog的作用:
- 做海量数据的统计工作
HyperLogLog的优点:
- 内存占用极低
- 性能非常好
HyperLogLog的缺点:
- 有一定的误差