首先我们搞懂两个概念:
- UV:全程Unique Visitor,也叫独立访客量、是指通过互联网访问、浏览这个网页的自然人
- PV:全程Page View,也叫页面访问量或者点击量,用户每访问网站的一个页面,记录1次PV,用户多次打开页面,则记录多次PV。往往用来衡量网站流量
UV统计在服务端做会比较麻烦,因此要判断该用户是否已经统计过了,需要将统计过的用户信息保存。但是如果每个访问的用户都保存到Redis中,数据量会非常恐怖。
- HyperLogLog用法 Hyperlonglong(HHL)是从Loglog算法派生的概率算法,用于确定非常大的集合的基数,而不需要存储其所有值。
Redis中的HLL是基于string结构实现的,单个HLL的内存永远小于16kb,内存占用很低。作为代价,其测量结果是概率性的,有小于0.81%的误差。不过对于UV统计来说,这完全可以忽略。

HyperLogLog常用指令:
PFADD key element [element ...]:添加指定元素到HyperLogLog中PFCOUNT key [key ...]:返回给定HyperLogLog的基数估算值,即统计key的value有多少个PFMERGE destkey sourcekey [sourcekey ...]:将多个HyperLogLog合并为一个HyperLogLog
HyperLogLog的作用:做海量数据的唯一性统计工作

- HyperLogLog的优缺点:
- 优点:内存占用极低、性能非常好
- 缺点:有一定的误差
HLL与布隆过滤器的有些特点比较相似,目标都是节省存储空间,结果都是非精准,都有一定的设置误判率或误差率的能力。布隆过滤器核心在于判定是元素是否存在,HLL核心是计数。