*Redis PFCOUNT 命令

PFCOUNT 返回 HyperLogLog 的基数估算值(不重复元素数量)。


*语法

PFCOUNT key [key ...]

*参数说明

参数 类型 必填 说明
key String HyperLogLog 键名,支持多个

*返回值

  • Integer:HyperLogLog 的基数估算值(不重复元素数量)
  • 当传入多个 key 时,返回合并后的估算值(不实际合并数据)
  • 如果 key 不存在,返回 0

*时间复杂度

O(1) 单个 key。多个 key 为 O(M),M 为 key 数量。每个 key 内部处理约 O(1)。


*示例

*基本用法

> PFADD hll a b c d e f g
(integer) 1
> PFCOUNT hll
(integer) 7

*多个 HyperLogLog 合并估算

> PFADD hll1 user1 user2 user3
(integer) 1
> PFADD hll2 user3 user4 user5
(integer) 1
> PFCOUNT hll1 hll2
(integer) 5

*key 不存在的场景

> PFCOUNT notexist
(integer) 0

*常见错误

错误 原因 解决
ERR wrong number of arguments 未提供 key 参数 至少提供一个 key
WRONGTYPE key 不是 HyperLogLog 类型 确认 key 类型或删除后重建

*最佳实践

  • 大规模 UV 统计、去重计数的首选方案,误差率约 0.81%
  • 多个 HyperLogLog 合并统计时,PFCOUNT key1 key2 ... 不会实际修改数据,只是返回估算值
  • 如需实际合并多个 HyperLogLog 到新的 key,使用 PFMERGE
  • 单个 PFCOUNT 固定 12KB 内存,多个 key 合并估算时内存使用会暂时增加,需注意并发量

*FAQ

Q1: PFCOUNT 的精度如何? A: 标准误差约 0.81%。对于 10 亿级元素,误差约 800 万。绝大多数统计场景下足够使用。

Q2: PFCOUNT 多个 key 和 PFMERGE 有什么区别? A: PFCOUNT key1 key2 只返回估算值,不修改任何数据。PFMERGE destkey key1 key2 会将合并结果写入 destkey,是写操作。

Q3: PFCOUNT 对不存在的 key 返回什么? A: 返回 (integer) 0,表示空集的基数为 0。不会报错。