網(wǎng)站首頁 編程語言 正文
一、HyperLogLog
1、為什么用HyperLogLog
先介紹兩個概念:
UV:全稱 Unique Visitor,也叫獨(dú)立訪客量,是指通過互聯(lián)網(wǎng)訪問、瀏覽這個網(wǎng)頁的自然人、1 天內(nèi)同一個用戶多次訪問該網(wǎng)站,只記錄 1 次。
PV:全稱 Page View,也叫頁面訪問量或點(diǎn)擊量,用戶每訪問網(wǎng)站的一個頁面,記錄一次 PV,用戶多次打開頁面,則記錄多次 PV。往往用來衡量網(wǎng)站的流量。
UV 統(tǒng)計在服務(wù)端做會比較麻煩,因?yàn)橐袛嘣撚脩羰欠褚呀?jīng)統(tǒng)計過了,需要將統(tǒng)計過的用戶信息保存。但是如果每個訪問的用戶都保存到Redis 中,數(shù)據(jù)量會非常恐怖。
那么我們要怎么更好的記錄呢?就用到 HyperLogLog
2、HyperLogLog是什么
HyperLogLog(HLL)是從 Loglog 算法派生的概率算法,用于確定非常大的集合的基數(shù),而不需要存儲其所有值。
Redis 中的 HLL 是基于 String 結(jié)構(gòu)實(shí)現(xiàn)的,單個 HLL 的內(nèi)存永遠(yuǎn)小于 16kb,內(nèi)存占用低的令人發(fā)指!作為代價,其測量結(jié)果是概率性的,有小于 0.81% 的誤差。不過對于 UV 統(tǒng)計來說,這完全可以忽略。
不管加入多少重復(fù)元素,HyperLogLog都只記錄一次,天生適合做uv的統(tǒng)計
二、實(shí)現(xiàn)UV統(tǒng)計
我們直接用單元測試,向 HyperLogLog 中添加 100 萬條數(shù)據(jù),看看內(nèi)存占用和統(tǒng)計效果如何:
@Test
void testHyperLogLog() {
String[] values = new String[1000];
int j = 0;
for (int i = 0; i < 1000000; i++) {
j = i % 1000;
values[j] = "user_" + i;
if(j == 999){
// 發(fā)送到 Redis
stringRedisTemplate.opsForHyperLogLog().add("hl2", values);
}
}
// 統(tǒng)計數(shù)量
Long count = stringRedisTemplate.opsForHyperLogLog().size("hl2");
System.out.println("count = " + count);
}
測試結(jié)果:
我們統(tǒng)計出來的數(shù)據(jù)跟100萬非常接近,誤差在0.02。而且發(fā)現(xiàn)內(nèi)存只消耗了14kb非常非常低
原文鏈接:https://blog.csdn.net/weixin_54232666/article/details/128779000
相關(guān)推薦
- 2022-04-19 React?組件權(quán)限控制的實(shí)現(xiàn)_React
- 2023-10-09 Linux下查看某個進(jìn)程占用的CPU、內(nèi)存
- 2022-06-25 Docker?安裝?Consul單機(jī)模式的操作方法_docker
- 2023-05-08 C語言單鏈表的圖文示例講解_C 語言
- 2022-10-30 在C#程序中注入惡意DLL的方法詳解_C#教程
- 2023-12-16 IDEA中設(shè)置遠(yuǎn)程調(diào)試服務(wù)器上的程序
- 2022-12-13 一文詳解Python加解壓文件gzip庫的操作_python
- 2022-04-18 2.* 版本taro引入 taro-ui編譯小程序階段報錯, Module not found: C
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支