Redis HyperLogLog是一種使用隨機(jī)化的算法,以少量?jī)?nèi)存提供集合中唯一元素?cái)?shù)量的近似值。
HyperLogLog 可以接受多個(gè)元素作為輸入,并給出輸入元素的基數(shù)估算值:
HyperLogLog 的優(yōu)點(diǎn)是,即使輸入元素的數(shù)量或者體積非常非常大,計(jì)算基數(shù)所需的空間總是固定的、并且是很小的。
在 Redis 里面,每個(gè) HyperLogLog 鍵只需要花費(fèi) 12 KB 內(nèi)存,就可以計(jì)算接近 2^64 個(gè)不同元素的基數(shù)。這和計(jì)算基數(shù)時(shí),元素越多耗費(fèi)內(nèi)存就越多的集合形成鮮明對(duì)比。
但是,因?yàn)?HyperLogLog 只會(huì)根據(jù)輸入元素來計(jì)算基數(shù),而不會(huì)儲(chǔ)存輸入元素本身,所以
HyperLogLog 不能像集合那樣,返回輸入的各個(gè)元素。
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 相關(guān)的一些基本命令。
| 序號(hào) | 命令 | 說明 |
|---|---|---|
| 1 | PFADD key element [element …] | 將指定的元素添加到指定的HyperLogLog 中。 |
| 2 | PFCOUNT key [key …] | 返回給定 HyperLogLog 的基數(shù)估算值。 |
| 3 | PFMERGE destkey sourcekey [sourcekey …] | 將多個(gè) HyperLogLog 合并為一個(gè) HyperLogLog |