HyperLogLog
提供不精确的去重计算方案,虽然不精确,但也不是非常离谱,标准误差是0.81%
案例
统计PV
给每个网页配一个独立的redis计数器,把这个计数器的key后缀加上当天的日期。这样来一个请求,执行incrby指令一次,最终就可以统计出所有的PV数据
统计UV:同一个用户一天之内的多次访问请求只能计数一次。
简单方法:为每一个页面设置一个独立的set集合存储当天访问过此页面的用户ID。当一个请求过来时,使用sadd将用户ID塞进去就可以,通过scard取集合的大小,就是页面UV数据
但如果集合过大,会浪费存储空间,使用hyperloglog
使用方法
HyperLogLog提供了两个指令pfadd和pfcount,一个增加计数,一个获取计数,pfmerge 合并两个
pfadd codehole user1
pfcount codehole
pfmerge code codehole1 codehole2
HyperLogLog 在计数较小时,存储空间采用稀疏矩阵存储,空间占用很小,在计数慢慢变大、稀疏矩阵占用空间渐渐超出阈值,才一次性转为稠密矩阵,才会占用12KB的空间
原理
略