由来
PV和UV,统计pv很简单,对每个网页加一个独立的redis计数器即可,这个计数器+当天的日期,每来一个请求,就incrby一次即可。但是UV不一样要求一个用户只能算一次,或许你想到了可以用set,把每一个页面放到set里面,当一个请求来了,就将其sadd进去,也可以通过scard取出这个集合的大小,但是有个问题,那就是访问量很大的时候,这个set集合就会很大。而这个redis提供的HyperLogLog数据结构来解决该问题。该数据结构提供一个不精确去重计数方案。
使用方法
HyperLogLog提供了2个指令pfadd,pfcount 根据字面意思很好理解,一个是增加计数,一个是获取计数,pfadd的用法和set集合的asdd一样的,pfcount和scard用法一样的,直接获取计数值。pfmerge将2个HyperLogLog合并。
pfadd codehole user1
其底层实现是稠密矩阵。一个我也不懂的数据结构