基数:一个数据集中不重复的元素。
A: {1, 3, 5, 7, 9, 7}
B: {1, 3, 5, 7, 9}
基数(不重复的元素)=5,可以接受误差
Redis tribution 2.8.9版本就更新了Hyperloglog数据结构。
Redis Hyperloglog 是基数统计的算法。
场景:
统计网页的UV(即Unique Visitor,不重复访客,访问量,一个人访问某个网站多次,但是还是只计算为一次)。
传统方式
Hyperloglog
因此,从内存角度来比较的话,Hyperloglog就是首选。
127.0.0.1:6379> PFADD mykey a b c d e f g
(integer) 1
127.0.0.1:6379> PFCOUNT mykey
(integer) 7
# ===========
# PFMERGE destkey sourcekey [sourcekey ...]
# 从源(sourcekey)key合并数据到目标(destkey)key中
127.0.0.1:6379> PFMERGE mykey2 mykey
OK
127.0.0.1:6379> PFCOUNT mykey2
(integer) 12
127.0.0.1:6379> PFCOUNT mykey
(integer) 7
# 可以看到,destkey可以是已存在的key,也可以是不存在的key,最后把合并的结果保存到destkey中
127.0.0.1:6379> PFMERGE mykey3 mykey2 mykey
OK
总结:
如果允许容错,那么一定可以使用Hyperloglog。
如果不允许容错,就使用set或者自己的数据类型即可。
原文:https://www.cnblogs.com/liuhuan086/p/13582907.html