Redis特殊數(shù)據(jù)類型HyperLogLog基數(shù)統(tǒng)計算法講解
Redis HyperLogLog基數(shù)統(tǒng)計
HyperLogLog 是用來做基數(shù)統(tǒng)計的算法。
先了解下什么是基數(shù)。
比如數(shù)據(jù)集{1, 3, 5, 7, 5, 7, 8},那么這個數(shù)據(jù)集的基數(shù)集為{1, 3, 5 ,7, 8},基數(shù)(不重復元素)為5。
如果,現(xiàn)在需要統(tǒng)計一下網(wǎng)頁的UV,那么就會涉及到去重了,這種場景就很適合用HyperLogLog。
這不就是set集合嘛?我用set來得出不重復的元素也可以呀。
沒錯,是可以,但是當數(shù)據(jù)量非常大的時候,你這個set是不是會占用非常大的內(nèi)存呢?
如果用HyperLogLog來處理就好了,因為它計算基數(shù)所需要的空間是一定的,只要12kb,就可以計算接近 2^64 個不同元素的基數(shù)。
但是注意在這個數(shù)量級下,是會存在0.81%的錯誤率的,所以說具體還得看業(yè)務是否可以接受這樣的錯誤率。
像上面說的統(tǒng)計UV的場景,這點錯誤率是可以忽略的。
一、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,也就是不重復的元素數(shù)量有9個。

三、pfmerge
將多個 HyperLogLog 合并為一個 HyperLogLog ,合并后的 HyperLogLog 的基數(shù)估算值是通過對所有 給定 HyperLogLog 進行并集計算得出的。
pfmerge mypftotal mypf3 mypf4
把mypf3、mypf4合并到mypftotal 上。

以上就是Redis特殊數(shù)據(jù)類型HyperLogLog基數(shù)統(tǒng)計算法講解的詳細內(nèi)容,更多關于Redis HyperLogLog基數(shù)統(tǒng)計的資料請關注腳本之家其它相關文章!
- Redis中HyperLogLog的使用小結(jié)
- Redis?HyperLogLog數(shù)據(jù)統(tǒng)計輕量級解決方案詳解
- Redis中?HyperLogLog數(shù)據(jù)類型使用小結(jié)
- Redis中HyperLogLog的使用詳情
- Redis如何使用HyperLogLog的實現(xiàn)
- Redis高級數(shù)據(jù)類型Hyperloglog、Bitmap的使用
- Redis中3種特殊的數(shù)據(jù)類型(BitMap、Geo和HyperLogLog)
- Redis?HyperLogLog數(shù)據(jù)量統(tǒng)計的實現(xiàn)實例
相關文章
Redis高級數(shù)據(jù)類型Hyperloglog、Bitmap的使用
很多小伙伴在面試中都會被問道 Redis的常用數(shù)據(jù)結(jié)構(gòu)有哪些?可能很大一部分回答都是 string、hash、list、set、zset,但其實還有Hyperloglog和Bitmap,本文就來介紹一下2021-05-05

