redis知識之HyperLogLog
先說明一下,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
浙公網安備 33010602011771號