Redis HyperLogLog是一種使用隨機化的演算法,以少量記憶體提供集合中唯一元素數量的近似值。
HyperLogLog 可以接受多個元素作為輸入,並給出輸入元素的基數估算值:
HyperLogLog 的優點是,即使輸入元素的數量或者體積非常非常大,計算基數所需的空間總是固定的、並且是很小的。
在 Redis 裡面,每個 HyperLogLog 鍵只需要花費 12 KB 記憶體,就可以計算接近 2^64 個不同元素的基數。這和計算基數時,元素越多耗費記憶體就越多的集合形成鮮明對比。
但是,因為 HyperLogLog 只會根據輸入元素來計算基數,而不會儲存輸入元素本身,所以
HyperLogLog 不能像集合那樣,返回輸入的各個元素。
redis 127.0.0.1:6379> PFADD mykey "redis"
1) (integer) 1
redis 127.0.0.1:6379> PFADD mykey "mongodb"
1) (integer) 1
redis 127.0.0.1:6379> PFADD mykey "mysql"
1) (integer) 1
redis 127.0.0.1:6379> PFCOUNT mykey
(integer) 3
下表列出了 HyperLogLog 相關的一些基本命令。
序號 | 命令 | 說明 |
---|---|---|
1 | PFADD key element [element …] | 將指定的元素新增到指定的HyperLogLog 中。 |
2 | PFCOUNT key [key …] | 返回給定 HyperLogLog 的基數估算值。 |
3 | PFMERGE destkey sourcekey [sourcekey …] | 將多個 HyperLogLog 合併為一個 HyperLogLog |