HyperLogLog 数据结构 统计数据

UV 不⼀样,它要去重,同⼀个⽤户⼀天之内的多次访问请求只能计数⼀次。这就要求每⼀个⽹⻚请求都需要带上⽤户的 ID,⽆论是登陆⽤户还是未登陆⽤户都需要⼀个唯⼀ ID 来标识。如⼀个爆款⻚⾯⼏千万的UV,你需要⼀个很⼤的 set 集合来统计,这就⾮常浪费空间。如果这样的⻚⾯很多,那所需要的存储空间是惊⼈的

Redis 提供了 HyperLogLog 数据结构就是⽤来解决这种统计问题的。HyperLogLog 提供不精确的去重计数⽅案,虽然不精确但是也不是⾮常不精确,标准误差是0.81%,这样的精确度已经可以满⾜上⾯的 UV 统计需求了。
HyperLogLog 提供了两个指令 pfadd 和 pfcount,根据字⾯意义 很好理解,⼀个是增加计数,⼀个是获取计数。pfadd ⽤法和 set 集合的 sadd 是⼀样的,来⼀个⽤户 ID,就将⽤户 ID 塞进去就是pfcount 和 scard ⽤法是⼀样的,直接获取计数值。
27.0.0.1:6379> pfadd codehole user1
(integer) 1
127.0.0.1:6379> pfcount codehole
(integer) 1
127.0.0.1:6379> pfadd codehole user2
(integer) 1
127.0.0.1:6379> pfcount codehole
(integer) 2
127.0.0.1:6379> 

 

posted @ 2019-05-31 22:08  小呆1107  阅读(561)  评论(0编辑  收藏  举报