先說明一下,HyperLogLog是一種演算法,並不是由redis創造了它。
Redis 在 2.8.9 版本新增了 HyperLogLog 結構(簡介HLL),用於做基數統計,其使用演算法HyperLogLog使得在數量級特別大的情況下佔用空間很小。說白了就是在大資料量級的情況下能夠在很小的空間中進行元素去重統計。如果使用我們平常的資料結構比如set,HashMap,等,雖然也可以實現去重統計的工作,但是當資料量上升到一定級別之後,其佔用的空間也是非常的大。
需要注意的是HyperLogLog演算法的去重計數方案並不精確,當然不是特別不精確,標準誤差只有0.81%
當然HyperLogLog雖說佔據空間小,但也不是不佔空間,它需要佔據一定12k儲存空間,所以如果我們的統計量可能比較小,使用HyperLogLog可能就是大材小用了,但是如果百萬級、千萬級,那節省的空間就大的大了去了。
基數:我理解就是一個資料集中不重複的元素個數。
一、基本命令
1)新增指定元素到 HyperLogLog 中
PFADD key element [element ...]
2)返回給定 HyperLogLog 的基數估算值。
PFCOUNT key [key ...]
若填寫多個key,則返回每個key對應HyperLogLog的基數估值之和。
3)將多個 HyperLogLog 合併為一個 HyperLogLog
PFMERGE destkey sourcekey [sourcekey ...]
PFMERGE 命令將多個 HyperLogLog 合併為一個 HyperLogLog ,合併後的 HyperLogLog 的基數估算值是透過對所有 給定 HyperLogLog 進行並集計算得出的。
二、使用場景
1.統計UV,PV。
UV(Unique visitor):是指從00:00-24:00內相同的客戶端的單次或者多次訪問標記為一次訪問。
PV(Page View):即頁面瀏覽量或點選量,相同客戶端的每次訪問都會使得統計量+1.
關於UV和PV的解釋
UV(Unique visitor)是指透過網際網路訪問、瀏覽這個網頁的自然人。訪問您網站的一臺電腦客戶端為一個訪客。00:00-24:00內相同的客戶端只被計算一次。
一天內同個訪客多次訪問僅計算一個UV。
IP(Internet Protocol)獨立IP是指訪問過某站點的IP總數,以使用者的IP地址作為統計依據。00:00-24:00內相同IP地址之被計算一次。
UV與IP區別:如:你和你的家人用各自的賬號在同一臺電腦上登入新浪微博,則IP數+1,UV數+2。由於使用的是同一臺電腦,所以IP不變,但使用的不同賬號,所以UV+2
PV(Page View)即頁面瀏覽量或點選量,使用者每1次對網站中的每個網頁訪問均被記錄1個PV。使用者對同一頁面的多次訪問,訪問量累計,用以衡量網站使用者訪問的網頁數量。
VV(Visit View)用以統計所有訪客1天內訪問網站的次數。當訪客完成所有瀏覽並最終關掉該網站的所有頁面時便完成了一次訪問,同一訪客1天內可能有多次訪問行為,訪問次數累計。
PV與VV區別:如:你今天10點鐘開啟了百度,訪問了它的三個頁面;11點鐘又開啟了百度,訪問了它的兩個頁面,則PV數+5,VV數+2.PV是指頁面的瀏覽次數,VV是指你訪問網站的次數。
參考連結
https://www.zhihu.com/question/20448467
三、HyperLogLog實現原理
四、參考連結
https://juejin.im/post/5c7900bf518825407c7eafd0#heading-1
https://blog.csdn.net/weixin_42627385/article/details/140930667
http://content.research.neustar.biz/blog/hll.html
https://developer.volcengine.com/articles/7065609735982022664