欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

微服務(wù)Spring Boot 整合 Redis 實現(xiàn)UV 數(shù)據(jù)統(tǒng)計的詳細過程

 更新時間:2023年01月18日 11:10:43   作者:Bug 終結(jié)者  
這篇文章主要介紹了微服務(wù)Spring Boot 整合 Redis 實現(xiàn) UV 數(shù)據(jù)統(tǒng)計,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下

?引言

本文參考黑馬 點評項目

在各個項目中,我們都可能需要用到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)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • RabbitMQ開啟SSL與SpringBoot連接測試的配置方法

    RabbitMQ開啟SSL與SpringBoot連接測試的配置方法

    本文基于 CentOS 7 + Git + OpenSSL + yum 安裝的 RabbitMQ,需要讀者提交安裝好。其他方式也可變通參考本文。對RabbitMQ開啟SSL與SpringBoot連接測試相關(guān)知識感興趣的朋友一起看看吧
    2022-01-01
  • Java面向?qū)ο缶幊讨惖睦^承詳解

    Java面向?qū)ο缶幊讨惖睦^承詳解

    這篇文章主要介紹了Java面向?qū)ο缶幊讨惖睦^承,結(jié)合實例形式較為詳細的分析了Java面向?qū)ο缶幊填惖母拍?、功能、使用方法及相關(guān)注意事項,需要的朋友可以參考下
    2018-02-02
  • Java中MyBatis Plus知識點總結(jié)

    Java中MyBatis Plus知識點總結(jié)

    在本篇文章里小編給大家整理一篇關(guān)于Java中MyBatis Plus知識點總結(jié),需要的朋友們參考下。
    2019-10-10
  • 解決版本不兼容Jar包沖突問題

    解決版本不兼容Jar包沖突問題

    在和三方對接的過程中,我們可能會不斷引入一些三方j(luò)ar包,但這個時候就有可能出現(xiàn)一個項目需要依賴兩個版本不同且功能不兼容的jar包,本文主要介紹了解決版本不兼容Jar包沖突問題,感興趣的可以了解一下
    2023-10-10
  • maven的三種工程pom、jar、war的區(qū)別

    maven的三種工程pom、jar、war的區(qū)別

    這篇文章主要介紹了maven的三種工程pom、jar、war的區(qū)別,詳細的介紹pom、jar、war和區(qū)別,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-11-11
  • 手把手教你JAVA進制之間的轉(zhuǎn)換

    手把手教你JAVA進制之間的轉(zhuǎn)換

    這篇文章主要介紹了Java實現(xiàn)的進制轉(zhuǎn)換,結(jié)合完整實例形式分析了Java實現(xiàn)二進制、十六進制、字符串、數(shù)組等相關(guān)轉(zhuǎn)換操作技巧,需要的朋友可以參考下
    2021-08-08
  • spring使用ehcache實現(xiàn)頁面緩存示例

    spring使用ehcache實現(xiàn)頁面緩存示例

    這篇文章主要介紹了spring使用ehcache實現(xiàn)頁面緩存示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-02-02
  • SpringBoot3.x接入Security6.x實現(xiàn)JWT認證的完整步驟

    SpringBoot3.x接入Security6.x實現(xiàn)JWT認證的完整步驟

    這篇文章主要介紹了Spring?Boot?3.x中Spring?Security?6.x的安全配置變化,特別是JWT過濾器的工作原理和配置方法,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2025-02-02
  • SpringMVC實現(xiàn)登錄與注冊功能的詳細步驟

    SpringMVC實現(xiàn)登錄與注冊功能的詳細步驟

    本文介紹了如何通過Maven配置依賴,創(chuàng)建前端登錄和注冊頁面,并實現(xiàn)后端邏輯,詳細步驟包括配置文件、創(chuàng)建User類、配置中文過濾器及DispatcherServlet,并使用Spring?MVC和JQuery處理前端請求,需要的朋友可以參考下
    2024-11-11
  • 一文搞懂Java項目中枚舉的定義與使用

    一文搞懂Java項目中枚舉的定義與使用

    枚舉就是用enum修飾是一種Java特殊的類,枚舉是class、底層是繼承了java.lang.Enum類的實體類。本文將詳解枚舉的定義與使用,需要的可以參考一下
    2022-06-06

最新評論