網站首頁 編程語言 正文
一、HyperLogLog
1、為什么用HyperLogLog
先介紹兩個概念:
UV:全稱 Unique Visitor,也叫獨立訪客量,是指通過互聯網訪問、瀏覽這個網頁的自然人、1 天內同一個用戶多次訪問該網站,只記錄 1 次。
PV:全稱 Page View,也叫頁面訪問量或點擊量,用戶每訪問網站的一個頁面,記錄一次 PV,用戶多次打開頁面,則記錄多次 PV。往往用來衡量網站的流量。
UV 統計在服務端做會比較麻煩,因為要判斷該用戶是否已經統計過了,需要將統計過的用戶信息保存。但是如果每個訪問的用戶都保存到Redis 中,數據量會非常恐怖。
那么我們要怎么更好的記錄呢?就用到 HyperLogLog
2、HyperLogLog是什么
HyperLogLog(HLL)是從 Loglog 算法派生的概率算法,用于確定非常大的集合的基數,而不需要存儲其所有值。
Redis 中的 HLL 是基于 String 結構實現的,單個 HLL 的內存永遠小于 16kb,內存占用低的令人發指!作為代價,其測量結果是概率性的,有小于 0.81% 的誤差。不過對于 UV 統計來說,這完全可以忽略。
不管加入多少重復元素,HyperLogLog都只記錄一次,天生適合做uv的統計
二、實現UV統計
我們直接用單元測試,向 HyperLogLog 中添加 100 萬條數據,看看內存占用和統計效果如何:
@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){
// 發送到 Redis
stringRedisTemplate.opsForHyperLogLog().add("hl2", values);
}
}
// 統計數量
Long count = stringRedisTemplate.opsForHyperLogLog().size("hl2");
System.out.println("count = " + count);
}
測試結果:
我們統計出來的數據跟100萬非常接近,誤差在0.02。而且發現內存只消耗了14kb非常非常低
原文鏈接:https://blog.csdn.net/weixin_54232666/article/details/128779000
相關推薦
- 2022-12-10 C語言中使用qsort函數對自定義結構體數組進行排序_C 語言
- 2022-07-12 Handler機制相關流程
- 2022-10-24 React中的生命周期和子組件_React
- 2022-10-28 Kotlin?嵌套函數開發技巧詳解_Android
- 2022-08-02 C#?HttpClient?Post參數同時上傳文件的實現_C#教程
- 2022-08-16 一篇文章徹底搞懂Python切片操作_python
- 2022-04-15 C語言?使用qsort函數來進行快速排序_C 語言
- 2022-05-24 Windows環境bat腳本獲取文件的創建時間_DOS/BAT
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支