1. Redis HyperLogLog
1.1 HyperLogLog 是什么
Redis HyperLogLog 是用来做基数统计的算法,每个 HyperLoglog 键只需要占用 12KB 内存,就可以计算接近 264 个不同的基数。HyperLogLog 的优点是在应对大量数据事可以利用极小且固定的空间完成对独立总数的统计,但缺点是它的统计并不十分准确,存在一定误差。HyperLogLog 只会根据输入的元素来统计基数,而不会存储输入的元素,因此相比于 Set 集合类型,它不会出现元素越多占用内存多大的情况,但是它也不能像 Set 类型一样返回输入的元素。
基数: 数据集中不同元素的个数。例如数据集 {8, 7, 3, 1, 0, 2, 1, 0} 中,基数集为 {8, 7, 3, 1, 0 , 2},基数为 6。
1.2 HyperLogLog 命令
- PFADD key element1 [element2]:向 HyperLogLog 键 key 中添加一个或多个元素。至少有一个元素被添加返回 1,否则返回 0。
> PFADD test1 a b c d
(integer) 1
> PFADD test1 a
(integer) 0
- PFCOUNT key1 [key2]:返回给定 HyperLogLog 的基数估算值,多个 HyperLogLog 时返回基数值之和。
> PFCOUNT test1
(integer) 4
> PFADD test2 e f g
(integer) 1
> PFCOUNT test1 test2
(integer) 7
- pfmerge destkey sourcekey1[sourcekey2]:将多个 HyperLogLog 合并为一个 HyperLogLog ,合并后的 HyperLogLog 的基数估算值是通过对所有给定 HyperLogLog 进行并集计算得出的。
> PFMERGE test test1 test2
OK
> PFCOUNT test
(integer) 7
1.3 应用场景
由于 HyperLogLog 可以对基数进行统计,