微服務(wù)Spring Boot 整合 Redis 實現(xiàn)UV 數(shù)據(jù)統(tǒng)計的詳細過程
?引言
本文參考黑馬 點評項目
在各個項目中,我們都可能需要用到UV數(shù)據(jù)統(tǒng)計功能,這樣可以使我們更加方便、快捷的查看網(wǎng)站的活躍度!
一、HyperLoglog基礎(chǔ)用法
?HyperLoglog 基本語法、命令
HyperLogLog
PFADD :將指定元素添加到HyperLogLogPFCOUNT:返回存儲在HyperLogLog結(jié)構(gòu)體的該變量的近似基數(shù),如果該變量不存在,則返回0PFMARGE:將多個 HyperLogLog 合并(merge)為一個 HyperLogLog , 合并后的 HyperLogLog 的基數(shù)接近于所有輸入 HyperLogLog 的可見集合(observed set)的并集.
詳見官網(wǎng): Redis 中文翻譯 官方網(wǎng)站 HyperLogLog
?HyperLoglog 命令完成功能實現(xiàn)
PFADD命令
使用PFADD 添加數(shù)據(jù)
PFCOUNT 統(tǒng)計
- 得到基數(shù)值,白話就叫做去重值(1,1,2,2,3, 3)的插入pfcount得到的是3
- 可一次統(tǒng)計多個key
- 時間復(fù)雜度為O(N),N為key的個數(shù)
- 返回值是一個帶有 0.81% 標準錯誤(standard error)的近似值.
使用PFCOUNT查詢
PFMERGE 合并
合并key
HyperLogLog 的應(yīng)用場景
- 基數(shù)不大的、數(shù)據(jù)量不大就用不上。
- 有局限性,就是只能統(tǒng)計基數(shù)數(shù)量,沒辦法統(tǒng)計具體的內(nèi)容
- 和BitMap相比,屬于兩種特定統(tǒng)計情況,HyperLogLog比 BitMap去重方便很多
- HyperLogLog 可以 與 BitMap 配合使用,BitMap標識那些用戶活躍,HyperLogLog計數(shù)
二、UV統(tǒng)計 測試百萬數(shù)據(jù)的統(tǒng)計
??什么是UV統(tǒng)計
- UV:全稱Unique Visitor,也叫獨立訪客量,是指通過互聯(lián)網(wǎng)訪問、瀏覽這個網(wǎng)頁的自然人。1天內(nèi)同一個用戶多次訪問該網(wǎng)站,只記錄1次。
- PV:全稱Page View,也叫頁面訪問量或點擊量,用戶每訪問網(wǎng)站的一個頁面,記錄1次PV,用戶多次打開頁面,則記錄多次PV。往往用來衡量網(wǎng)站的流量。
通常來說 UV 會比 PV 大很多,一個網(wǎng)站的獨立訪客量 和 頁面訪問或點擊量,肯定是獨立訪客大的。
UV統(tǒng)計在服務(wù)端做會比較麻煩,因為要判斷該用戶是否已經(jīng)統(tǒng)計過了,需要將統(tǒng)計過的用戶信息保存。但是如果每個訪問的用戶都保存到Redis中,數(shù)據(jù)量會非常恐怖,那怎么處理呢?
Hyperloglog(HLL)是從Loglog算法派生的概率算法,用于確定非常大的集合的基數(shù),而不需要存儲其所有值。
Redis 中的HLL 是基于string數(shù)據(jù)結(jié)構(gòu)實現(xiàn)的,單個HLL的內(nèi)存永遠小于16kb, 內(nèi)存極低!作為代價,其測量結(jié)果是概率性的,有小于0.81%的誤差。不過對于UV統(tǒng)計來說,這完全可以忽略。
?使用SpringBoot單元測試進行測試百萬數(shù)據(jù)統(tǒng)計
首先進入Redis 查看 內(nèi)存占用
info memory
核心源碼
@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); }
執(zhí)行后,如下圖
再次查看內(nèi)存占比
可以看出占用大約為14KB,存儲上百萬數(shù)據(jù)只占用了14KB數(shù)據(jù),可見HyperLogLog的強大!
?小結(jié)
以上就是【Bug 終結(jié)者】對 微服務(wù)Spring Boot 整合 Redis 實現(xiàn) UV 數(shù)據(jù)統(tǒng)計 的簡單介紹,UV數(shù)據(jù)統(tǒng)計功能是很常用的,在項目中,是一個不錯的亮點,統(tǒng)計功能也是各大系統(tǒng)中比較重要的功能,簽到完成后,去統(tǒng)計本月的連續(xù) 簽到記錄,來給予獎勵,可大大增加用戶對系統(tǒng)的活躍度,HyperLogLog可以與BitMap相結(jié)合,從而能夠能高效的對網(wǎng)站進行深層次的分析! 技術(shù)改變世界?。?!
到此這篇關(guān)于微服務(wù)Spring Boot 整合 Redis 實現(xiàn) UV 數(shù)據(jù)統(tǒng)計的文章就介紹到這了,更多相關(guān)Spring Boot UV 數(shù)據(jù)統(tǒng)計內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- springboot項目Redis統(tǒng)計在線用戶的實現(xiàn)示例
- SpringBoot+Redis Bitmap實現(xiàn)活躍用戶統(tǒng)計
- SpringBoot+Redis?BitMap實現(xiàn)簽到與統(tǒng)計的項目實踐
- 微服務(wù)?Spring?Boot?整合?Redis?BitMap?實現(xiàn)?簽到與統(tǒng)計功能
- SpringBoot整合Redis實現(xiàn)訪問量統(tǒng)計的示例代碼
- SpringBoot使用Redis的zset統(tǒng)計在線用戶信息
- SpringBoot運用Redis統(tǒng)計用戶在線數(shù)量的兩種方法實現(xiàn)
相關(guān)文章
RabbitMQ開啟SSL與SpringBoot連接測試的配置方法
本文基于 CentOS 7 + Git + OpenSSL + yum 安裝的 RabbitMQ,需要讀者提交安裝好。其他方式也可變通參考本文。對RabbitMQ開啟SSL與SpringBoot連接測試相關(guān)知識感興趣的朋友一起看看吧2022-01-01SpringBoot3.x接入Security6.x實現(xiàn)JWT認證的完整步驟
這篇文章主要介紹了Spring?Boot?3.x中Spring?Security?6.x的安全配置變化,特別是JWT過濾器的工作原理和配置方法,文中通過代碼介紹的非常詳細,需要的朋友可以參考下2025-02-02