成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

Redis數(shù)據(jù)結(jié)構(gòu)HyperLogLog怎么用

這篇文章主要介紹redis數(shù)據(jù)結(jié)構(gòu)HyperLogLog怎么用,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!

成都創(chuàng)新互聯(lián)公司是一家專(zhuān)業(yè)從事網(wǎng)站設(shè)計(jì)制作、成都網(wǎng)站設(shè)計(jì)的網(wǎng)絡(luò)公司。作為專(zhuān)業(yè)網(wǎng)站制作公司,成都創(chuàng)新互聯(lián)公司依托的技術(shù)實(shí)力、以及多年的網(wǎng)站運(yùn)營(yíng)經(jīng)驗(yàn),為您提供專(zhuān)業(yè)的成都網(wǎng)站建設(shè)、全網(wǎng)營(yíng)銷(xiāo)推廣及網(wǎng)站設(shè)計(jì)開(kāi)發(fā)服務(wù)!

HyperLogLog(下文簡(jiǎn)稱(chēng)為 HLL)是 Redis 2.8.9 版本添加的數(shù)據(jù)結(jié)構(gòu),它用于高性能的基數(shù)(去重)統(tǒng)計(jì)功能,它的缺點(diǎn)就是存在極低的誤差率。

HLL命令是以pf 它是 HyperLogLog 這個(gè)數(shù)據(jù)結(jié)構(gòu)的發(fā)明人 Philippe Flajolet 的首字母縮寫(xiě)

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

計(jì)算一個(gè)或多個(gè)HyperLogLog的獨(dú)立總數(shù)

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 ]

計(jì)算多個(gè)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 內(nèi)存占用量非常小,但是存在一定誤差率,redis官方給出的數(shù)字是0.81%的失誤率,開(kāi)發(fā)中進(jìn)行數(shù)據(jù)選型需要確認(rèn)如下兩條即可:
只是為了計(jì)算獨(dú)立總數(shù),不需要獲取單條數(shù)據(jù)
可以容忍一定誤差率。畢竟HyperLogLog 內(nèi)存占用量非常小

數(shù)據(jù)去重統(tǒng)計(jì)

如果統(tǒng)計(jì) PV 那非常好辦,給每個(gè)網(wǎng)頁(yè)一個(gè)獨(dú)立的 Redis 計(jì)數(shù)器就可以了,這個(gè)計(jì)數(shù)器的 key 后綴加上當(dāng)天的日期。這樣來(lái)一個(gè)請(qǐng)求,incrby 一次,最終就可以統(tǒng)計(jì)出所有的 PV 數(shù)據(jù)。

但是 UV 不一樣,它要去重,同一個(gè)用戶一天之內(nèi)的多次訪問(wèn)請(qǐng)求只能計(jì)數(shù)一次。這就要求每一個(gè)網(wǎng)頁(yè)請(qǐng)求都需要帶上用戶的 ID,無(wú)論是登陸用戶還是未登陸用戶都需要一個(gè)唯一 ID 來(lái)標(biāo)識(shí)。

你也許已經(jīng)想到了一個(gè)簡(jiǎn)單的方案,那就是為每一個(gè)頁(yè)面一個(gè)獨(dú)立的 set 集合來(lái)存儲(chǔ)所有當(dāng)天訪問(wèn)過(guò)此頁(yè)面的用戶 ID。當(dāng)一個(gè)請(qǐng)求過(guò)來(lái)時(shí),我們使用 sadd 將用戶 ID 塞進(jìn)去就可以了。通過(guò) scard 可以取出這個(gè)集合的大小,這個(gè)數(shù)字就是這個(gè)頁(yè)面的 UV 數(shù)據(jù)。沒(méi)錯(cuò),這是一個(gè)非常簡(jiǎn)單的方案。

但是,如果你的頁(yè)面訪問(wèn)量非常大,比如一個(gè)爆款頁(yè)面幾千萬(wàn)的 UV,你需要一個(gè)很大的 set 集合來(lái)統(tǒng)計(jì),這就非常浪費(fèi)空間。如果這樣的頁(yè)面很多,那所需要的存儲(chǔ)空間是驚人的。為這樣一個(gè)去重功能就耗費(fèi)這樣多的存儲(chǔ)空間,值得么?其實(shí)老板需要的數(shù)據(jù)又不需要太精確,105w 和 106w 這兩個(gè)數(shù)字對(duì)于老板們來(lái)說(shuō)并沒(méi)有多大區(qū)別,So,有沒(méi)有更好的解決方案呢?

這就是本節(jié)要引入的一個(gè)解決方案,Redis 提供了 HyperLogLog 數(shù)據(jù)結(jié)構(gòu)就是用來(lái)解決這種統(tǒng)計(jì)問(wèn)題的。HyperLogLog 提供不精確的去重計(jì)數(shù)方案,雖然不精確但是也不是非常不精確,標(biāo)準(zhǔn)誤差是 0.81%,這樣的精確度已經(jīng)可以滿足上面的 UV 統(tǒng)計(jì)需求了。

HyperLogLog 數(shù)據(jù)結(jié)構(gòu)是 Redis 的高級(jí)數(shù)據(jù)結(jié)構(gòu),它非常有用,但是令人感到意外的是,使用過(guò)它的人非常少。

注意事項(xiàng)

HyperLogLog 這個(gè)數(shù)據(jù)結(jié)構(gòu)不是免費(fèi)的,不是說(shuō)使用這個(gè)數(shù)據(jù)結(jié)構(gòu)要花錢(qián),它需要占據(jù)一定 12k 的存儲(chǔ)空間,所以它不適合統(tǒng)計(jì)單個(gè)用戶相關(guān)的數(shù)據(jù)。如果你的用戶上億,可以算算,這個(gè)空間成本是非常驚人的。但是相比 set 存儲(chǔ)方案,HyperLogLog 所使用的空間那真是可以使用千斤對(duì)比四兩來(lái)形容了。

不過(guò)你也不必過(guò)于擔(dān)心,因?yàn)?Redis 對(duì) HyperLogLog 的存儲(chǔ)進(jìn)行了優(yōu)化,在計(jì)數(shù)比較小時(shí),它的存儲(chǔ)空間采用稀疏矩陣存儲(chǔ),空間占用很小,僅僅在計(jì)數(shù)慢慢變大,稀疏矩陣占用空間漸漸超過(guò)了閾值時(shí)才會(huì)一次性轉(zhuǎn)變成稠密矩陣,才會(huì)占用 12k 的空間。

HyperLogLog 實(shí)現(xiàn)原理

HLL 引入了分桶算法和調(diào)和平均數(shù)來(lái)使這個(gè)算法更接近真實(shí)情況。

分桶算法是指把原來(lái)的數(shù)據(jù)平均分為 m 份,在每段中求平均數(shù)在乘以 m,以此來(lái)消減因偶然性帶來(lái)的誤差,提高預(yù)估的準(zhǔn)確性,簡(jiǎn)單來(lái)說(shuō)就是把一份數(shù)據(jù)分為多份,把一輪計(jì)算,分為多輪計(jì)算。

調(diào)和平均數(shù)指的是使用平均數(shù)的優(yōu)化算法,而非直接使用平均數(shù)。

以上是“Redis數(shù)據(jù)結(jié)構(gòu)HyperLogLog怎么用”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!

當(dāng)前文章:Redis數(shù)據(jù)結(jié)構(gòu)HyperLogLog怎么用
分享URL:http://jinyejixie.com/article26/ijgcjg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App開(kāi)發(fā)、全網(wǎng)營(yíng)銷(xiāo)推廣定制開(kāi)發(fā)、品牌網(wǎng)站建設(shè)、微信小程序、網(wǎng)站內(nèi)鏈

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站網(wǎng)頁(yè)設(shè)計(jì)
武平县| 扎赉特旗| 清镇市| 阳曲县| 芦溪县| 九龙县| 申扎县| 任丘市| 麻江县| 西城区| 青田县| 福泉市| 玛纳斯县| 龙江县| 盐源县| 长海县| 汾阳市| 长海县| 汾阳市| 丰宁| 云南省| 巴南区| 高雄县| 化州市| 颍上县| 恩平市| 历史| 上林县| 黔东| 台州市| 永寿县| 紫云| 绍兴市| 开江县| 定西市| 讷河市| 郴州市| 治县。| 垦利县| 普兰县| 武平县|