Redis的HyperLogLog

翔之天空發表於2016-10-30


Redis 在 2.8.9 版本新增了HyperLogLog 結構。

Redis HyperLogLog 是用來做基數統計的演算法,HyperLogLog的優點是,在輸入元素的數量或者體積非常非常大時,計算基數所需的空間總是固定的、並且是很小的。

在 Redis 裡面,每個 HyperLogLog 鍵只需要花費 12 KB 記憶體,就可以計算接近 2^64 個不同元素的基數。這和計算基數時,元素越多耗費記憶體就越多的集合形成鮮明對比。

但是,因為 HyperLogLog 只會根據輸入元素來計算基數,而不會儲存輸入元素本身,所以 HyperLogLog 不能像集合那樣,返回輸入的各個元素。


什麼是基數?

比如資料集 {1, 3, 5, 7, 5, 7, 8},那麼這個資料集的基數集為 {1, 3, 5 ,7, 8}, 基數(不重複元素)為5。基數估計就是在誤差可接受的範圍內,快速計算基數。

 

本次演示HyperLogLog的基本操作

127.0.0.1:6379> pfadd test_hyper "lalala"
(integer) 1

127.0.0.1:6379> pfadd test_hyper "bbblll"
(integer) 1

127.0.0.1:6379> pfadd test_hype r"cacaca"
(integer) 1

127.0.0.1:6379> pfcount test_hyper
(integer) 3

 

 

RedisHyperLogLog 命令

PFADD key element [element ...] 新增指定元素到HyperLogLog 中。

PFCOUNT key [key ...] 返回給定HyperLogLog 的基數估算值。

PFMERGE destkey sourcekey [sourcekey ...] 將多個HyperLogLog 合併為一個 HyperLogLog

相關文章