HyperLogLog


HyperLogLog

簡介

Redis 在 2.8.9版本添加了HyperLogLog結構
Redis HyperLogLog 是用來做基數統計的算法,HyperLogLog的優點是,在輸入元素的數量或者體積非常非常大時,計算基數所需的空間總是固定的、並且是很小的;

在Redis里面,每個HyperLogLog鍵只需要花費12KB內存,就可以計算接近2的64次方個不同的基數。這和計算基數時,元素越多耗費內存就越多的集合形成鮮明對比;
但是,因為HyperLogLog只會根據輸入元素來計算基數,而不會存儲輸入元素本身,所以HyperLogLog不能想集合那樣,返回輸入的各個元素;

小知識:
什么是基數?
比如數據集{1,3,5,7,5,7,8},那么這個數據集的基數集為{1,3,5,7,8},基數(不重復元素)為5,基數估計就是誤差可節省的范圍內,快速計算基數;

為什么需要HyperLogLog

如果要統計1億個數據的基數值,大約需要內部才能100000000/8/1024/1024 約等於12M,內存減少占用的效果顯著;
然而統計一個對象的基數值需要12M,如果統計10000個對象,就需要將近120G,同樣不能廣泛用於大數據場景;

常用命令

PFADD key element [element ...]:添加指定元素到HyperLogLog中
PFCOUNT key [key ...]:返回給定HyperLogLog的基數估算值
PFMERGE destkey sourcekey [sourcekey ...]:將多個HyperLogLog合並為一個HyperLogLog

應用場景

基數不大、數據量不大就用不上,會有點大材小用浪費空間

有局限性,就是只能統計基數數量,而沒辦法知道具體內容是什么

統計注冊 IP 數
統計每日訪問 IP 數
統計頁面實時 UV 數
統計在線用戶數
統計每天搜索不同詞條的個數
統計真實文章閱讀數

總結

  HyperLogLog是一種算法,並非redis獨有,目的是做基數統計,故不是集合,不會保存元數據,知識記錄數量而不是數值;

 耗費空間小,支持輸入非常大體積的數據量;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM