<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
HyperLogLog ,基數統計;
那什麼是基數?
比如有兩個陣列
陣列A = [1,2,3,4,5];
陣列B = [3,4,5,6,7];
這時候基數就是 [1,2,3,4,5,6,7],總共有7個數;
就是去重之後的資料;
HyperLogLog 就是用來做去重複統計的;
bitmap 在做統計時,雖然使用的是 bit 來做記錄,已經很節省空間了;
但是在隨著資料量快速增長的情況下,bitmap 也是很佔記憶體空間的;
而 HyperLogLog 就不同了,HyperLogLog 的每個 key 只佔用 12kb 的記憶體,
就可以統計 2的64 次方個基數;
而且不會隨著資料量的增多而變大,就是固定的 12kb;
這是因為 HyperLogLog 每次只會根據新增的資料去計算基數,而不儲存新增的資料本身;
但這也造成了一個問題,就是 HyperLogLog 基數統計的準確率不是100%,會有 0.81% 的誤差;
但對於億級資料的統計,這點誤差似乎可以忽略不計;
同樣的,bitmap 記錄資料本身,它的計算是精確的;
所有,也可以說 HyperLogLog 是一種概率計算,但是誤差是很小的。
HyperLogLog 的使用也非常簡單,就3個操作api
pfadd key value [value ...]
pfadd 20220628:uv ip1 ip2 ip3 pfadd 20220629:uv ip1 ip2 ip3 ip4 ip5 pfadd 20220630:uv ip2 ip4 ip5 ip6 ip7 ip8
重複資料不會被儲存,返回的是0
> pfadd 20220628:uv ip1 ip2 ip3 1 > pfadd 20220628:uv ip1 ip2 ip3 0
PFCOUNT key [key ...]
> pfcount 20220628:uv 20220629:uv 5
合併得出的不會被儲存,使用之後就會被刪掉
pfmerge destkey key [key ...]
> pfmerge result 20220628:uv 20220629:uv 20220630:uv OK
pfmerge 合併多個key後,會生成一條 result 資料
然後再對 result 做 pfcount 操作
> pfcount result 8
這時候拿到的值就是 上面3個key 計算出來的基數。
HyperLogLog 在 spring 裡的使用也非常簡單,
pfadd 對應的是 .add() 操作;
pfcount 對應的是 .size() 操作;
pfmerge 對應的是 .union() 操作;
下面是使用的 Demo
import org.junit.jupiter.api.Test; import org.junit.runner.RunWith; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.data.redis.core.HyperLogLogOperations; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.test.context.junit4.SpringRunner; import javax.annotation.Resource; @SpringBootTest @RunWith(SpringRunner.class) class RedisTest { @Resource private RedisTemplate<String, String> redisTemplate; @Test void hyperLogLogTest() { HyperLogLogOperations<String, String> hyperLogLogOperations = redisTemplate.opsForHyperLogLog(); // 新增元素 Long add = hyperLogLogOperations.add("20220628:uv", "ip1", "ip2", "ip3"); System.out.println("add : " + add); hyperLogLogOperations.add("20220629:uv", "ip1", "ip2", "ip3", "ip4", "ip5"); hyperLogLogOperations.add("20220630:uv", "ip2", "ip4", "ip5", "ip6", "ip7", "ip8"); // 獲取元素基數 Long size = hyperLogLogOperations.size("20220628:uv", "20220629:uv"); System.out.println("size : " + size); // 合併多個元素 Long result = hyperLogLogOperations.union("unionResult", "20220628:uv", "20220629:uv", "20220630:uv"); System.out.println("result : " + result); Long unionResult = hyperLogLogOperations.size("unionResult"); System.out.println("unionResult : " + unionResult); } }
到此這篇關於Redis中HyperLogLog的使用詳情的文章就介紹到這了,更多相關RedisH yperLogLog內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45