UV统计
UV:Unique Visitor,即独立访客量,是指通过互联网访问、浏览该网页的自然人。一天内同一个用户多次访问该网站,只会记录一次。
PV:Page View,即页面访问量或点击量,用户每访问网站的一个页面,记录一次PV,用户多次打开页面,则记录多次PV,通常用来衡量一个网站的流量。
这两个统计的数值的大小与比值对于衡量一个网站的优劣具有一定的可靠性。比如说,一些营销网站为了增加用户浏览量,会设置大量的小广告迫使用户去点击,然而当用户点击进去查看到内容不感兴趣的时候就会立马关闭或退出网站,如此以来,该网站的UV和PV之间的比值会很大,说明该网站的质量不是很高。相反,当一些优质网站的UV与PV的比值会很小,因为其内容的品质较好,能够吸引用户的眼球,用户会主动访问网站中的其他页面来获取信息。但是相比于PV,UV的统计会更具有价值。
UV统计在服务端实现起来相对比较麻烦,因为判断该用户是否已经统计被过,需要将统计过的用户信息保存。但是如果每个访问的用户都保存在Redis中,其数据量是相当恐怖的。
这是就不得不提到一个算法来解决这个问题了。
Hyperloglog(HLL)是从Loglog算法派生出的概率算法,用于确定覅长达的集合的基数,而不需要存储其所有值。
而Redis中的HLL是基于string结构实现的,其测量结构虽然是概率性的,但是只有小于0.81%的误差(对于UV统计可以完全忽略),并且其单个HLL的内存永远小于16kb。
Redis HyperLogLog 命令
下图为Redis中Hyperloglog的使用命令
下表列出了 redis HyperLogLog 的基本命令:
序号 | 命令及描述 |
---|---|
1 | PFADD key element [element …] 添加指定元素到 HyperLogLog 中。 |
2 | PFCOUNT key [key …] 返回给定 HyperLogLog 的基数估算值。 |
3 | PFMERGE destkey sourcekey [sourcekey …] 将多个 HyperLogLog 合并为一个 HyperLogLog |