Redis特殊數(shù)據(jù)類型HyperLogLog基數(shù)統(tǒng)計(jì)算法講解
Redis HyperLogLog基數(shù)統(tǒng)計(jì)
HyperLogLog 是用來做基數(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)頁的UV,那么就會(huì)涉及到去重了,這種場(chǎng)景就很適合用HyperLogLog。
這不就是set集合嘛?我用set來得出不重復(fù)的元素也可以呀。
沒錯(cuò),是可以,但是當(dāng)數(shù)據(jù)量非常大的時(shí)候,你這個(gè)set是不是會(huì)占用非常大的內(nèi)存呢?
如果用HyperLogLog來處理就好了,因?yàn)樗?jì)算基數(shù)所需要的空間是一定的,只要12kb
,就可以計(jì)算接近 2^64
個(gè)不同元素的基數(shù)。
但是注意在這個(gè)數(shù)量級(jí)下,是會(huì)存在0.81%
的錯(cuò)誤率的,所以說具體還得看業(yè)務(wù)是否可以接受這樣的錯(cuò)誤率。
像上面說的統(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ù)估算值是通過對(duì)所有 給定 HyperLogLog 進(jìn)行并集計(jì)算得出的。
pfmerge mypftotal mypf3 mypf4
把mypf3、mypf4
合并到mypftotal
上。
以上就是Redis特殊數(shù)據(jù)類型HyperLogLog基數(shù)統(tǒng)計(jì)算法講解的詳細(xì)內(nèi)容,更多關(guān)于Redis HyperLogLog基數(shù)統(tǒng)計(jì)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- Redis中HyperLogLog的使用小結(jié)
- Redis?HyperLogLog數(shù)據(jù)統(tǒng)計(jì)輕量級(jí)解決方案詳解
- Redis中?HyperLogLog數(shù)據(jù)類型使用小結(jié)
- Redis中HyperLogLog的使用詳情
- Redis如何使用HyperLogLog的實(shí)現(xiàn)
- Redis高級(jí)數(shù)據(jù)類型Hyperloglog、Bitmap的使用
- Redis中3種特殊的數(shù)據(jù)類型(BitMap、Geo和HyperLogLog)
- Redis?HyperLogLog數(shù)據(jù)量統(tǒng)計(jì)的實(shí)現(xiàn)實(shí)例
相關(guān)文章
redis中事務(wù)機(jī)制及樂觀鎖的實(shí)現(xiàn)
這篇文章主要介紹了redis中事務(wù)機(jī)制及樂觀鎖的相關(guān)內(nèi)容,通過事務(wù)的執(zhí)行分析Redis樂觀鎖,具有一定參考價(jià)值,需要的朋友可以了解下。2017-10-10Redis高級(jí)數(shù)據(jù)類型Hyperloglog、Bitmap的使用
很多小伙伴在面試中都會(huì)被問道 Redis的常用數(shù)據(jù)結(jié)構(gòu)有哪些?可能很大一部分回答都是 string、hash、list、set、zset,但其實(shí)還有Hyperloglog和Bitmap,本文就來介紹一下2021-05-05