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