Redis HyperLogLog 学习笔记

1. HyperLogLog 简介

HyperLogLog 是 Redis 提供的一种基数统计算法,它可以用于高效地估计某个集合中不重复元素的个数。与传统的基数算法相比,HyperLogLog 具有内存占用少、统计精度高等优点。

HyperLogLog 通过随机化技术可以以很小的代价获得较高的统计精度,其时间和空间复杂度均为 O(n),其中 n 表示集合中不同元素的数量。

HyperLogLog 的原理是将每个元素通过哈希函数计算之后,映射到一个位数组中的某一位,并记录每个位数组中最大的二进制末尾连续零的个数。最后通过一定的算法对这些估计值进行加权平均,得到总体的不同元素数量。

2. HyperLogLog 操作

Redis 提供了以下 HyperLogLog 操作:

2.1 PFADD

向指定的 HyperLogLog 中添加元素。

语法:

Copy Code
PFADD key element [element ...]

实例:

Copy Code
127.0.0.1:6379> PFADD hll a b c (integer) 1

2.2 PFCOUNT

返回指定 HyperLogLog 的基数估计值。

语法:

Copy Code
PFCOUNT key [key ...]

实例:

Copy Code
127.0.0.1:6379> PFCOUNT hll (integer) 3

2.3 PFMERGE

将多个 HyperLogLog 合并成一个。

语法:

Copy Code
PFMERGE destkey sourcekey [sourcekey ...]

实例:

Copy Code
127.0.0.1:6379> PFADD hll1 a b c (integer) 1 127.0.0.1:6379> PFADD hll2 c d e (integer) 1 127.0.0.1:6379> PFMERGE hll3 hll1 hll2 OK 127.0.0.1:6379> PFCOUNT hll3 (integer) 5

3. 注意事项

为了获得更好的精度,HyperLogLog 需要占用较大的内存空间。当统计元素数量超过 10^9 时,误差率也会变得很大。因此在实际使用中需要结合具体业务场景进行选择。