共计 762 个字符,预计需要花费 2 分钟才能阅读完成。
简述
HyperLogLog 提供不准确的去重计数计划,用于记录大数据量的计数(如,网站的 uv),尽管不准确然而也不是十分不准确,标准误差是 0.81%。
应用办法
HyperLogLog 提供了两个指令 pfadd 和 pfcount,依据字面意义很好了解,一个是减少计数,一个是获取计数。pfadd 用法和 set 汇合的 sadd 是一样的,来一个用户 ID,就将用户 ID 塞进去就是。pfcount 和 scard 用法是一样的,间接获取计数值。
127.0.0.1:6379> pfadd codehole user1 user2 user3 | |
(integer) 3 | |
127.0.0.1:6379> pfcount codehole | |
(integer) 3 |
接下来咱们应用脚本,往里面灌更多的数据,看看它是否还能够持续准确上来,如果不能准确,差距有多大。
import redis | |
client = redis.StrictRedis() | |
for i in range(100000): | |
client.pfadd("codehole", "user%d" % i) | |
print 100000, client.pfcount("codehole") |
> python pftest.py 100000 99723
pfmerge
HyperLogLog 除了下面的 pfadd 和 pfcount 之外,还提供了第三个指令 pfmerge,用于将多个 pf 计数值累加在一起造成一个新的 pf 值。
比方在网站中咱们有两个内容差不多的页面,经营说须要这两个页面的数据进行合并。其中页面的 UV 访问量也须要合并,那这个时候 pfmerge 就能够派上用场了。
# 合并三个 key 到第一个 key:test_uv | |
127.0.0.1:6379> PFMERGE test_uv test_uv2 test_uv3 | |
OK | |
127.0.0.1:6379> pfcount test_uv | |
5 |
正文完