簡介
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,基數估計就是誤差可節省的范圍內,快速計算基數;
如果要統計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獨有,目的是做基數統計,故不是集合,不會保存元數據,知識記錄數量而不是數值;
耗費空間小,支持輸入非常大體積的數據量;