最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Redis如何統(tǒng)計用戶訪問量

 更新時間:2023年07月14日 09:33:10   作者:一傾而盡  
這篇文章主要介紹了Redis如何統(tǒng)計用戶訪問量問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

Redis統(tǒng)計用戶訪問量

1. 使用Hash

哈希作為Redis的一種基礎(chǔ)數(shù)據(jù)結(jié)構(gòu),Redis底層維護的是一個開散列,會把不同的key值映射到哈希表 上,如果是遇到關(guān)鍵字沖突,那么就會拉出一個列表出來。

當一個用戶訪問時,如果用戶登陸過,那么我們就使用用戶的id,如果用戶沒有登陸過,那么也可以在前端頁面隨機生成一個key用來標識用戶,當用戶訪問的時候,我們可以使用HSET命令,key可以選擇URI與對應(yīng)的日期進行拼湊,field則可以使用用戶的id或者隨機標識,value則可以簡單設(shè)置為1。

當要訪問一個網(wǎng)站某一天的訪問量時,就可以直接使用HLEN來獲取結(jié)果;

優(yōu)點:簡單,易實現(xiàn).查詢方便,并且數(shù)據(jù)精準性非常好.

缺點:內(nèi)存占用過大.隨著key的增多,性能會隨之下降.無法支撐大規(guī)模的訪問量.

2. 使用Bitset

對于個int型的數(shù)來說,若用來記錄id,則只能記錄一個,而若轉(zhuǎn)換為二進制存儲,則可以表示32個,空間的利用率提升了32倍.對于海量數(shù)據(jù)的處理,這樣的存儲方式會節(jié)省很多內(nèi)存空間.對于未登陸的用戶,可以使用Hash算法,把對應(yīng)的用戶標識哈希為一個數(shù)字id.對于一億個數(shù)據(jù)來說,我們也只需要1000000000/8/1024/1024大約12M空間左右.

Redis已經(jīng)為我們提供了SETBIT的方法,使用起來非常的方便,我們在item頁面可以不停地使用SETBIT命令,設(shè)置用戶已經(jīng)訪問了該頁面,也可以使用GETBIT的方法查詢某個用戶是否訪問。最后通過BITCOUNT統(tǒng)計該網(wǎng)頁每天的訪問數(shù)量。

優(yōu)點:占用內(nèi)存更小,查詢方便,可以指定查詢某個用戶,對于非登陸的用戶,可能不同的key映射到同一個id,否則需要維護一個非登陸用戶的映射,有額外的開銷。

缺點:如果用戶過于稀疏,則占用的內(nèi)存可能比第一個方法更大

3. 使用概率算法

對于一個網(wǎng)站頁面若訪問量非常大的話,如果要求的數(shù)量不是很高,可以考慮使用概率算法。

在Redis中,已經(jīng)對HyperLogLog算法做了封裝,這是一種基數(shù)評估算法:不存儲具體數(shù)值,只是存儲用來計算概率的一些相關(guān)數(shù)據(jù)。

當用戶訪問網(wǎng)站的時候,可以使用PFADD命令,設(shè)置對應(yīng)的命令,最后我們只要通過PFCOUNT順利計算出最終的結(jié)果,因為這是一個概率算法,所以可能存在一定的誤差。

優(yōu)點:占用內(nèi)存極小,對于一個key,只需要12kb。對于超大規(guī)模數(shù)據(jù)訪問量的網(wǎng)站效率極高

缺點:查詢指定用戶的時候,可能會出錯。在總數(shù)統(tǒng)計時也不一定十分精準.

使用Redis做某個時間段在線數(shù)統(tǒng)計

一般有范圍性的需求都可以使用 sorted set 實現(xiàn)。

sorted set 類型通常用于實現(xiàn)(排行榜,最新的xxx,延遲隊列…)

實現(xiàn)

實現(xiàn)很簡單,將用戶的登錄時間轉(zhuǎn)換成時間戳作為權(quán)重即可。

假設(shè)用戶1,3 在20220801號登錄

zadd login 1659283200 1
zadd login 1659283200 3

假設(shè)用戶2,3 在20220802號登錄

zadd login 1659369600 2
zadd login 1659369600 3

假設(shè)用戶4,在20220803號登錄

zadd login 1659456000 4

統(tǒng)計20220801至20220802的在線用戶數(shù)量

# ZCOUNT key min max
# 在線 3
zcount login 1659283200 1659369600

拓展:在上面的基礎(chǔ)上統(tǒng)計連續(xù)兩天都在線的用戶及其最后登錄時間

假設(shè)用戶1,3 在20220801號登錄

zadd login:20220801 1659283200 1
zadd login:20220801 1659283200 3

假設(shè)用戶2,3 在20220802號登錄

zadd login:20220802 1659369600 2
zadd login:20220802 1659369600 3

假設(shè)用戶4,在20220803號登錄

zadd login:20220803 1659456000 4

統(tǒng)計20220801,20220802 兩天都登錄的用戶及其最后登錄時間

# 將兩個交集保存至 result:20220801:20220802
# aggregate max 保留最大的權(quán)重(即最后登錄時間)
# 不使用 aggregate max,權(quán)重會累加
zinterstore result:20220801:20220802 2 login:20220801 login:20220802 aggregate max
# 展示數(shù)據(jù)
zrange result:20220801:20220802 0 -1 withscores

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 關(guān)于Redis的內(nèi)存淘汰策略詳解

    關(guān)于Redis的內(nèi)存淘汰策略詳解

    當內(nèi)存空間使用達到限制時,Redis 會根據(jù)配置策略來選擇不同處理方式,要么返回 errors,要么按照不同的策略算法來清除一些舊數(shù)據(jù),達到回收內(nèi)存的目的,這就是 Redis 的內(nèi)存淘汰,有些文章中,內(nèi)存淘汰也叫緩存回收,需要的朋友可以參考下
    2023-05-05
  • Redis Key命名規(guī)范實戰(zhàn)指南

    Redis Key命名規(guī)范實戰(zhàn)指南

    本文主要介紹了Redis Key命名規(guī)范實戰(zhàn)指南,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2026-03-03
  • Quarkus集成redis操作Redisson實現(xiàn)數(shù)據(jù)互通

    Quarkus集成redis操作Redisson實現(xiàn)數(shù)據(jù)互通

    這篇文章主要為大家介紹了Quarkus集成redis操作Redisson實現(xiàn)數(shù)據(jù)互通的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步
    2022-02-02
  • Redis集群部署的過程詳解

    Redis集群部署的過程詳解

    Redis集群是Redis官方推出的分布式解決方案,它允許將數(shù)據(jù)分布在多個Redis節(jié)點中,從而提高Redis的性能和可擴展性,本文給大家介紹了Redis集群部署的過程步驟,需要的朋友可以參考下
    2024-06-06
  • Redis實現(xiàn)RBAC權(quán)限管理

    Redis實現(xiàn)RBAC權(quán)限管理

    本文主要介紹了Redis實現(xiàn)RBAC權(quán)限管理,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2025-03-03
  • Redis中什么是Big?Key(大key)問題?如何解決Big?Key問題?

    Redis中什么是Big?Key(大key)問題?如何解決Big?Key問題?

    大key并不是指key的值很大,而是key對應(yīng)的value很大,下面這篇文章主要給大家介紹了Redis中什么是Big?Key(大key)問題?如何解決Big?Key問題的相關(guān)資料,需要的朋友可以參考下
    2023-03-03
  • Redis安裝啟動及常見數(shù)據(jù)類型

    Redis安裝啟動及常見數(shù)據(jù)類型

    這篇文章主要介紹了Redis安裝啟動及常見數(shù)據(jù)類型,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-04-04
  • 使用redis實現(xiàn)附近的人功能

    使用redis實現(xiàn)附近的人功能

    這篇文章主要介紹了使用redis實現(xiàn)附近的人,實現(xiàn)諸如附近的人這類依賴于地理位置信息的功能,本文通過實例代碼給大家介紹的非常詳細,需要的朋友可以參考下
    2021-09-09
  • redis調(diào)用二維碼時的不斷刷新排查分析

    redis調(diào)用二維碼時的不斷刷新排查分析

    這篇文章主要為大家介紹了redis調(diào)用二維碼時不斷刷新排查分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步早日升職加薪
    2022-04-04
  • 淺談我是如何用redis做實時訂閱推送的

    淺談我是如何用redis做實時訂閱推送的

    這篇文章主要介紹了淺談我是如何用redis做實時訂閱推送的,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-03-03

最新評論

井冈山市| 遂昌县| 阆中市| 旬邑县| 舞阳县| 通化市| 历史| 息烽县| 石棉县| 本溪市| 纳雍县| 黄冈市| 新密市| 依安县| 九龙坡区| 南溪县| 怀远县| 禄劝| 西昌市| 鸡泽县| 鄄城县| 瓦房店市| 昭觉县| 大安市| 明溪县| 沁源县| 扬州市| 衡南县| 康马县| 同江市| 伊春市| 霍邱县| 井研县| 措美县| 延吉市| 勃利县| 洪洞县| 聂拉木县| 孙吴县| 漾濞| 吉隆县|