Skip to content
DAILY QUOTE

“ ”

首先我们搞懂两个概念:

  • 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核心是计数。