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

上一篇: Redis集合 下一篇: Redis發送訂閱