语法

1
PFMERGE destkey [sourcekey [sourcekey ...]]

可用版本

≥ 2.8.9

时间复杂度

$O(N)$

N 为需要的 HyperLogLog 的数量。

ACL类别

@write@hyperloglog@slow

将多个 HyperLogLog 合并为一个 HyperLogLog,合并后的 HyperLogLog 的基数估算值是通过对所有给定 HyperLogLog 进行并集计算得出的。

合并后的 HyperLogLog 会被储存在 destkey 键里面,如果该键并不存在,那么命令在执行之前,会先为该键创建一个空的 HyperLogLog。如果该键存在,则将其视为源集之一,其基数将包含在计算的 HyperLogLog 的基数中。

简单来说就是,把多个 HyperLogLog 合并到一起,得到一个代表并集基数的HyperLogLog,如果目标 key 存在,也会一起合并,得到的目标 key 就是最终的合并结果。

返回值

返回 OK

示例 1

将两个 HyperLogLog 合并为一个 HyperLogLog,并储存在一个不存在的键上:

1
2
3
4
5
6
7
8
redis> PFADD hll:1 a b c
(integer) 1
redis> PFADD "hll:2" d e f
(integer) 1
redis> PFMERGE "hll:target" "hll:1" "hll:2"
OK
redis> PFCOUNT "hll:target"
(integer) 6

示例 2

将两个 HyperLogLog 合并为一个 HyperLogLog,并储存在一个已经存在的键上:

1
2
3
4
5
6
7
8
9
10
redis> PFADD hll:1 a b c
(integer) 1
redis> PFADD "hll:2" d e f
(integer) 1
redis> PFADD "hll:3" z
(integer) 1
redis> PFMERGE "hll:3" "hll:1" "hll:2"
OK
redis> PFCOUNT "hll:3"
(integer) 7

(END)