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ù)結構中。
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)計的資料請關注腳本之家其它相關文章!
相關文章
Linux服務器使用Redis作為數(shù)據(jù)緩存并用log4j2進行日志記錄的過程分享
這篇文章主要介紹了Linux服務器使用Redis作為數(shù)據(jù)緩存并用log4j2日志記錄,關于SpringBoot項目配置Redis與log4j2是查詢官方文檔,本文中的Redis配置類、Redis工具類以及l(fā)og4j2.xml配置文件來自網(wǎng)絡,查證源自何處比較麻煩,所以在此感謝所有人的分享2023-09-09簡介Lua腳本與Redis數(shù)據(jù)庫的結合使用
這篇文章主要介紹了簡介Lua腳本與Redis數(shù)據(jù)庫的結合使用,Redis是基于主存的高性能數(shù)據(jù)庫,需要的朋友可以參考下2015-06-06Quarkus集成redis操作Redisson實現(xiàn)數(shù)據(jù)互通
這篇文章主要為大家介紹了Quarkus集成redis操作Redisson實現(xiàn)數(shù)據(jù)互通的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步2022-02-02