- HyperLogLog 是一种概率数据结构,用于估计集合的基数。
- 每个 HyperLogLog 最多只需要花费 12KB 内存,在标准误差 0.81%的前提下,就可以计算 2 的 64 次方个元素的基数。
- HyperLogLog 的优点在于它所需的内存并不会因为集合的大小而改变,无论集合包含的元素有多少个,HyperLogLog 进行计算所需的内存总是固定的,并且是非常少的。
- 使用场景:
- 统计一个 APP 的日活、月活数。
- 统计一个页面的每天被多少个不同账户访问量(Unique Visitor,UV)。
- 统计用户每天搜索不同词条的个数。
- 统计注册 IP 数。
PFADD#
- 向 HyperLogLog 的Key添加元素。如果key不存在则创建key。
- 如果 HyperLogLog 估计的近似基数在执行命令后发生变化,则返回 1,否则返回 0。
- 语法:
PFADD key [element [element ...]]
- 使用示例:
# 向 hll 的 key 中添加元素 a b c d e f g
$ PFADD hll a b c d e f g
(integer) 1
# 查询 hll 的 key 中不同元素的数量
$ PFCOUNT hll
(integer) 7
$ PFADD hll xxx
(integer) 1
$ PFCOUNT hll
(integer) 8
$ PFADD hll xxx
(integer) 0
$ PFCOUNT hll
(integer) 8
PFCOUNT#
- 语法:
- 当使用单个key调用时,返回由存储在指定变量处的 HyperLogLog 数据结构计算的近似基数,如果变量不存在,则为 0。
- 当使用多个键调用时,通过在内部合并存储在提供的键上的 HyperLogLogs 到临时 HyperLogLog 中,返回传递的 HyperLogLogs 并集的近似基数。
- 观测集返回的基数并不精确,而是近似于标准误差为 0.81%。
- 使用示例:
$ PFADD hll foo bar zap
(integer) 1
$ PFADD hll zap zap zap
(integer) 0
$ PFADD hll foo bar
(integer) 0
$ PFCOUNT hll
(integer) 3
$ PFADD some-other-hll 1 2 3
(integer) 1
$ PFCOUNT hll some-other-hll
(integer) 6
$ PFADD some-other-hll foo 4
(integer) 1
$ PFCOUNT hll some-other-hll
(integer) 7
PFDEBUG#
- 该命令是内部命令。它旨在用于开发和测试 Redis。
- 语法:
PFMERGE#
- 将多个 HyperLogLog 合并(merge)为一个 HyperLogLog,合并后的 HyperLogLog 的基数接近于所有输入 HyperLogLog 的可见集合(observed set)的并集。
- 计算合并的 HyperLogLog 设置为目标变量,即 如果不存在,则创建(默认为空的 HyperLogLog)。
- 如果目标变量存在,则将其视为源集之一其基数将包含在计算的基数中 HyperLogLog。
- 语法:
PFMERGE destkey [sourcekey [sourcekey ...]]
- 使用示例:
$ PFADD hll1 foo bar zap a
(integer) 1
$ PFADD hll2 a b c foo
(integer) 1
$ PFMERGE hll3 hll1 hll2
"OK"
$ PFCOUNT hll3
(integer) 6
PFSELFTEST#
- PFSELFTEST命令是一个内部命令。它是用来开发和测试Redis的。