Redis HyperLogLog
Redis HyperLogLog是一種使用隨機化的算法,以少量內存提供集合中唯一元素數量的近似值。
HyperLogLog 可以接受多個元素作爲輸入,並給出輸入元素的基數估算值:
- 基數:集合中不同元素的數量。比如 {‘apple’, ‘banana’, ‘cherry’, ‘banana’, ‘apple’} 的基數就是 3 。
- 估算值:算法給出的基數並不是精確的,可能會比實際稍微多一些或者稍微少一些,但會控制在合理的範圍之內。
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
Redis集排序集合命令
下表列出了 HyperLogLog 相關的一些基本命令。
序號
命令
說明
1
PFADD key element [element …]
將指定的元素添加到指定的HyperLogLog 中。
2
PFCOUNT key [key …]
返回給定 HyperLogLog 的基數估算值。
3
PFMERGE destkey sourcekey [sourcekey …]
將多個 HyperLogLog 合併爲一個 HyperLogLog