redis~HyperLogLog

介紹

        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。 基數估計就是在誤差可接受的範圍內,快速計算基數。

命令:

添加元素: pfadd key element ...

獲取基數估算值: pfcount key ..

將多個HyperLogLog 合併爲一個:pfmerge destkey sourcekey1 sourcekey2 ....

pfadd pfkey 1 2 3 4 (integer) 1 
pfadd pfkey 45 
(integer) 1 
pfcount pfkey 
(integer) 5 
pfadd pf1key 34 45 76 
(integer) 1 
pfmerge destkey pfkey pf1key 
OK 
pfcount destkey 
(integer) 7

應用場景

統計註冊 IP 數 / 統計每日訪問 IP 數 / 統計頁面實時 UV 數 / 統計在線用戶數等

注意:它也有侷限性,就是隻能統計基數數量,而沒辦法去知道具體的內容是什麼。

        它和bitmap相比,屬於兩種特定統計情況,簡單來說,HyperLogLog 去重比 bitmap 方便很多。

統計訪問 IP 數

    用命令PFCOUNT 求得的ip數量,直接去重了,簡單直接,非常棒。

PFADD ip_date1 "ip1" "ip2" "ip3" 
PFCOUNT ip_date1 
(integer) 3 
PFADD ip_date2 "ip1" 
(integer) 1 
PFCOUNT ip_date1 ip_date2 
(integer) 3

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章