Redis特殊數(shù)據(jù)類(lèi)型HyperLogLog基數(shù)統(tǒng)計(jì)算法講解
Redis HyperLogLog基數(shù)統(tǒng)計(jì)
HyperLogLog 是用來(lái)做基數(shù)統(tǒng)計(jì)的算法。
先了解下什么是基數(shù)。
比如數(shù)據(jù)集{1, 3, 5, 7, 5, 7, 8}
,那么這個(gè)數(shù)據(jù)集的基數(shù)集為{1, 3, 5 ,7, 8}
,基數(shù)(不重復(fù)元素)為5。
如果,現(xiàn)在需要統(tǒng)計(jì)一下網(wǎng)頁(yè)的UV,那么就會(huì)涉及到去重了,這種場(chǎng)景就很適合用HyperLogLog。
這不就是set集合嘛?我用set來(lái)得出不重復(fù)的元素也可以呀。
沒(méi)錯(cuò),是可以,但是當(dāng)數(shù)據(jù)量非常大的時(shí)候,你這個(gè)set是不是會(huì)占用非常大的內(nèi)存呢?
如果用HyperLogLog來(lái)處理就好了,因?yàn)樗?jì)算基數(shù)所需要的空間是一定的,只要12kb
,就可以計(jì)算接近 2^64
個(gè)不同元素的基數(shù)。
但是注意在這個(gè)數(shù)量級(jí)下,是會(huì)存在0.81%
的錯(cuò)誤率的,所以說(shuō)具體還得看業(yè)務(wù)是否可以接受這樣的錯(cuò)誤率。
像上面說(shuō)的統(tǒng)計(jì)UV的場(chǎng)景,這點(diǎn)錯(cuò)誤率是可以忽略的。
一、pfadd
將所有元素參數(shù)添加到 HyperLogLog 數(shù)據(jù)結(jié)構(gòu)中。
pfadd mypf 1 2 3 a b c 3 4 5 c d a
二、pfcount
返回給定 HyperLogLog 的基數(shù)估算值。
pfcount mypf
可以看到,返回的是9,也就是不重復(fù)的元素?cái)?shù)量有9個(gè)。
三、pfmerge
將多個(gè) HyperLogLog 合并為一個(gè) HyperLogLog ,合并后的 HyperLogLog 的基數(shù)估算值是通過(guò)對(duì)所有 給定 HyperLogLog 進(jìn)行并集計(jì)算得出的。
pfmerge mypftotal mypf3 mypf4
把mypf3、mypf4
合并到mypftotal
上。
以上就是Redis特殊數(shù)據(jù)類(lèi)型HyperLogLog基數(shù)統(tǒng)計(jì)算法講解的詳細(xì)內(nèi)容,更多關(guān)于Redis HyperLogLog基數(shù)統(tǒng)計(jì)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
redis5.0以上基于密碼認(rèn)證的集群cluster方式
這篇文章主要介紹了redis5.0以上基于密碼認(rèn)證的集群cluster方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-11-11Linux服務(wù)器使用Redis作為數(shù)據(jù)緩存并用log4j2進(jìn)行日志記錄的過(guò)程分享
這篇文章主要介紹了Linux服務(wù)器使用Redis作為數(shù)據(jù)緩存并用log4j2日志記錄,關(guān)于SpringBoot項(xiàng)目配置Redis與log4j2是查詢(xún)官方文檔,本文中的Redis配置類(lèi)、Redis工具類(lèi)以及l(fā)og4j2.xml配置文件來(lái)自網(wǎng)絡(luò),查證源自何處比較麻煩,所以在此感謝所有人的分享2023-09-09簡(jiǎn)介L(zhǎng)ua腳本與Redis數(shù)據(jù)庫(kù)的結(jié)合使用
這篇文章主要介紹了簡(jiǎn)介L(zhǎng)ua腳本與Redis數(shù)據(jù)庫(kù)的結(jié)合使用,Redis是基于主存的高性能數(shù)據(jù)庫(kù),需要的朋友可以參考下2015-06-06Quarkus集成redis操作Redisson實(shí)現(xiàn)數(shù)據(jù)互通
這篇文章主要為大家介紹了Quarkus集成redis操作Redisson實(shí)現(xiàn)數(shù)據(jù)互通的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2022-02-02Redis筆記點(diǎn)贊排行榜的實(shí)現(xiàn)示例
探店筆記類(lèi)似點(diǎn)評(píng)網(wǎng)站的評(píng)價(jià),本文主要介紹了Redis筆記點(diǎn)贊排行榜的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-01-01用Lua腳本實(shí)現(xiàn)Redis原子操作的示例
本文主要介紹了用Lua腳本實(shí)現(xiàn)Redis原子操作的示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2025-03-03Redis序列化轉(zhuǎn)換類(lèi)型報(bào)錯(cuò)的解決
本文主要介紹了Redis序列化轉(zhuǎn)換類(lèi)型報(bào)錯(cuò)的解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-04-04Redis實(shí)現(xiàn)客戶(hù)端緩存的4種方式
客戶(hù)端緩存是指在應(yīng)用程序內(nèi)存中維護(hù)一份Redis數(shù)據(jù)的本地副本,以減少網(wǎng)絡(luò)請(qǐng)求次數(shù),降低延遲,并減輕Redis服務(wù)器負(fù)擔(dān),本文將分享Redis客戶(hù)端緩存的四種實(shí)現(xiàn)方式,大家可以參考一下2025-05-05