语法

1
PFCOUNT key [key ...]

可用版本

≥ 2.8.9

时间复杂度

当命令作用于单个 HyperLogLog 时,复杂度为 $O(1)$,并且具有非常低的平均常数时间。当命令作用于 N 个 HyperLogLog 时,复杂度为 $O(N)$ ,常数时间也比处理单个 HyperLogLog 时要大得多。

ACL类别

@read@hyperloglog@slow

调用 PFCOUNT 命令时,如果只传入一个 key,则返回存储在指定 key 中的 HyperLogLog 数据结构计算的近似基数,如果 key 不存在则返回为 0。

如果传入多个 key 时,则返回所有给定 key 中的 HyperLogLog 的合集的近似基数,这个近似基数是通过合并所有给定的 HyperLogLog 到一个临时 HyperLogLog 中计算得出的。

HyperLogLog 数据结构用于计算集合中的唯一元素,只需要使用少量固定内存,特别是每个 HyperLogLog 占用 12KB(加上 key 本身的几个字节)。

返回的集合基数不是精确的,而是近似的,标准误差为 0.81%。

例如,要计算一天中进行的所有不同搜索查询次数,一个程序需要在每次处理查询时调用 PFADD。随时可以用 PFCOUNT 检索近似的唯一查询次数。

注意:作为调用此函数的副作用,HyperLogLog 有可能被修改,因为最后 8 个字节编码了最近计算的基数以进行缓存。所以从技术上讲,PFCOUNT 也是一个写命令。

返回值

返回一个整数,给定 HyperLogLog 包含的唯一元素的近似数量。

示例

1
2
3
4
5
6
7
8
9
10
11
12
redis> PFADD hll foo bar zap
(integer) 1
redis> PFADD hll zap zap zap
(integer) 0
redis> PFADD hll foo bar
(integer) 0
redis> PFCOUNT hll
(integer) 3
redis> PFADD some-other-hll 1 2 3
(integer) 1
redis> PFCOUNT hll some-other-hll
(integer) 6

(END)