亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Redis數據結構HyperLogLog怎么用

發布時間:2021-12-06 14:04:05 來源:億速云 閱讀:232 作者:小新 欄目:大數據

這篇文章主要介紹Redis數據結構HyperLogLog怎么用,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

HyperLogLog(下文簡稱為 HLL)是 Redis 2.8.9 版本添加的數據結構,它用于高性能的基數(去重)統計功能,它的缺點就是存在極低的誤差率。

HLL命令是以pf 它是 HyperLogLog 這個數據結構的發明人 Philippe Flajolet 的首字母縮寫

pfadd

pfadd key elemnet [element]pfadd 添加元素,如果添加成功返回1

127.0.0.1:6379> pfadd 2019-04-29:unique:ids u1 u2 u3 u4(integer) 1

pfcount

計算一個或多個HyperLogLog的獨立總數

127.0.0.1:6379> pfcount 2019-04-29:unique:ids(integer) 4127.0.0.1:6379> pfadd 2019-04-29:unique:ids u1 u2 u3 u5(integer) 1127.0.0.1:6379> pfcount 2019-04-29:unique:ids(integer) 5

pfmerge

pfmerge destkey sourcekey [sourcekey ]

計算多個HyperLoglog的并集并賦值給destkey

127.0.0.1:6379> pfadd 2019-04-30:unique:ids u4 u2 u3 u6 u7(integer) 1127.0.0.1:6379> pfmerge 2019-04:unique:ids 2019-04-29:unique:ids 2019-04-30:unique:idsOK127.0.0.1:6379> pfcount 2019-04:unique:ids(integer) 7

HyperLogLog 內存占用量非常小,但是存在一定誤差率,redis官方給出的數字是0.81%的失誤率,開發中進行數據選型需要確認如下兩條即可:
只是為了計算獨立總數,不需要獲取單條數據
可以容忍一定誤差率。畢竟HyperLogLog 內存占用量非常小

數據去重統計

如果統計 PV 那非常好辦,給每個網頁一個獨立的 Redis 計數器就可以了,這個計數器的 key 后綴加上當天的日期。這樣來一個請求,incrby 一次,最終就可以統計出所有的 PV 數據。

但是 UV 不一樣,它要去重,同一個用戶一天之內的多次訪問請求只能計數一次。這就要求每一個網頁請求都需要帶上用戶的 ID,無論是登陸用戶還是未登陸用戶都需要一個唯一 ID 來標識。

你也許已經想到了一個簡單的方案,那就是為每一個頁面一個獨立的 set 集合來存儲所有當天訪問過此頁面的用戶 ID。當一個請求過來時,我們使用 sadd 將用戶 ID 塞進去就可以了。通過 scard 可以取出這個集合的大小,這個數字就是這個頁面的 UV 數據。沒錯,這是一個非常簡單的方案。

但是,如果你的頁面訪問量非常大,比如一個爆款頁面幾千萬的 UV,你需要一個很大的 set 集合來統計,這就非常浪費空間。如果這樣的頁面很多,那所需要的存儲空間是驚人的。為這樣一個去重功能就耗費這樣多的存儲空間,值得么?其實老板需要的數據又不需要太精確,105w 和 106w 這兩個數字對于老板們來說并沒有多大區別,So,有沒有更好的解決方案呢?

這就是本節要引入的一個解決方案,Redis 提供了 HyperLogLog 數據結構就是用來解決這種統計問題的。HyperLogLog 提供不精確的去重計數方案,雖然不精確但是也不是非常不精確,標準誤差是 0.81%,這樣的精確度已經可以滿足上面的 UV 統計需求了。

HyperLogLog 數據結構是 Redis 的高級數據結構,它非常有用,但是令人感到意外的是,使用過它的人非常少。

注意事項

HyperLogLog 這個數據結構不是免費的,不是說使用這個數據結構要花錢,它需要占據一定 12k 的存儲空間,所以它不適合統計單個用戶相關的數據。如果你的用戶上億,可以算算,這個空間成本是非常驚人的。但是相比 set 存儲方案,HyperLogLog 所使用的空間那真是可以使用千斤對比四兩來形容了。

不過你也不必過于擔心,因為 Redis 對 HyperLogLog 的存儲進行了優化,在計數比較小時,它的存儲空間采用稀疏矩陣存儲,空間占用很小,僅僅在計數慢慢變大,稀疏矩陣占用空間漸漸超過了閾值時才會一次性轉變成稠密矩陣,才會占用 12k 的空間。

HyperLogLog 實現原理

HLL 引入了分桶算法和調和平均數來使這個算法更接近真實情況。

分桶算法是指把原來的數據平均分為 m 份,在每段中求平均數在乘以 m,以此來消減因偶然性帶來的誤差,提高預估的準確性,簡單來說就是把一份數據分為多份,把一輪計算,分為多輪計算。

調和平均數指的是使用平均數的優化算法,而非直接使用平均數。

以上是“Redis數據結構HyperLogLog怎么用”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

岳普湖县| 荆州市| 明光市| 安岳县| 通江县| 龙口市| 密云县| 澄迈县| 威海市| 沙雅县| 闵行区| 永川市| 墨竹工卡县| 台安县| 枣庄市| 凤冈县| 永昌县| 财经| 佛教| 家居| 阿鲁科尔沁旗| 甘谷县| 武胜县| 荣昌县| 通江县| 太和县| 彰化县| 龙川县| 洛宁县| 垣曲县| 岳池县| 呼玛县| 鹤庆县| 泸溪县| 辉南县| 宣汉县| 休宁县| 汕头市| 科尔| 龙游县| 丹巴县|