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

利用Redis統(tǒng)計(jì)網(wǎng)站在線活躍用戶的方法

 更新時(shí)間:2017年01月25日 11:32:31   投稿:daisy  
Redis支持對(duì)String類型的value進(jìn)行基于二進(jìn)制位的置位操作。通過(guò)將一個(gè)用戶的id對(duì)應(yīng)value上的一位,通過(guò)對(duì)活躍用戶對(duì)應(yīng)的位進(jìn)行置位,就能夠用一個(gè)value記錄所有活躍用戶的信息。下面這篇文章主要介紹了利用Redis統(tǒng)計(jì)網(wǎng)站在線活躍用戶的方法,需要的朋友可以參考。

前言

在工作中我們經(jīng)常遇到這樣的需求,要對(duì)某個(gè)在線網(wǎng)站的活躍用戶數(shù)量進(jìn)行統(tǒng)計(jì)。這里我們以redis為例,說(shuō)明一下其實(shí)現(xiàn)的過(guò)程。

實(shí)現(xiàn)方法

在Redis中存在bitmap這種數(shù)據(jù)類型,這種數(shù)據(jù)類型是建立在string數(shù)據(jù)類型之上的。這里,我們主要用到setbit、bitcount這2個(gè)命令,而使用的客戶端為python的redis庫(kù)。

import redis 
r = redis.StrictRedis(host="127.0.0.1",port=6379,db=0)

這里我們引入redis庫(kù),然后實(shí)例化了1個(gè)StrictRedis類。由于這里使用的默認(rèn)的選項(xiàng),我們可以在StrictRedis不傳入任何參數(shù)。

r = redis.StrictRedis()

這里我們定義3個(gè)方法storeDailyVisit,removeDailyVisit和countVisits,分別用于用戶上線時(shí)進(jìn)行記錄、用戶下線時(shí)進(jìn)行記錄以及查看指定日期活躍的用戶總數(shù)。

下面我們來(lái)看storeDailyVisit函數(shù):

def storeDailyVisit(date,userId,verbose=False): 
 key = "visits:daily:"+date 
 r.setbit(key,userId,1) 
 if verbose: 
  print("User",userId,"visited on",date)

該函數(shù)接收2個(gè)參數(shù)date和userId,分別為指定的日期和用戶的ID,第3個(gè)參數(shù)用于指定是否輸出內(nèi)容。在這里我們輸出用戶訪問(wèn)的信息,當(dāng)然我們可以將其記錄在日志中等其他操作。

當(dāng)某個(gè)用戶登錄后,我們調(diào)用該函數(shù),傳入今天的日期及用戶的ID。removeDailyVisit函數(shù)與storeDailyVisit函數(shù)類似,它主要負(fù)責(zé)當(dāng)用戶退出當(dāng)前網(wǎng)站時(shí)將其從bitmap表中移除。

def removeDailyVisit(date,userId,verbose=False): 
 key = "visits:daily:"+date 
 r.setbit(key,userId,0) 
 if verbose: 
  print("User",userId,"leave on",date)

下面我們通過(guò)countVisits函數(shù)得到當(dāng)前活躍的用戶的數(shù)量:

def countVisits(date): 
 key = "visits:daily:"+date 
 return r.bitcount(key)

這里,countVisits函數(shù)接收1個(gè)日期的參數(shù),它通過(guò)調(diào)用bitmaps數(shù)據(jù)類型的bitcount函數(shù)得到當(dāng)前數(shù)字為1的個(gè)數(shù)。這里我們將它返回給調(diào)用者。

由于bitmaps是1種按位進(jìn)行操作的數(shù)據(jù)類型,其是1串連續(xù)的二進(jìn)制數(shù)字(0或1)。我們通過(guò)對(duì)其某個(gè)位上的數(shù)值進(jìn)行設(shè)置為1,然后通過(guò)bitcount函數(shù)統(tǒng)計(jì)這串二進(jìn)制數(shù)字上為1的總數(shù),從而得到當(dāng)前活躍的用戶總數(shù)。

另外,我們還可以使用redis的set數(shù)據(jù)類型來(lái)實(shí)現(xiàn)同樣的操作,我們可以通過(guò)下表來(lái)查看這二者的差別:

| 數(shù)據(jù)類型 | 每個(gè)消耗的位 | 存儲(chǔ)用戶 | 消耗的內(nèi)存 |
|———-|—————|————|——————|
| bitmap | 1bit | 500000000 |1*500000000B=59.6Mb|
| set | 32bit | 500000000 |32*500000000B=1.91Tb|

我們可以清楚的看到,當(dāng)存儲(chǔ)的用戶為5個(gè)億的時(shí)候,需要消耗的內(nèi)存bitmap為59.6MB,而set為1.91TB,整整32倍。因此,在實(shí)際的在線網(wǎng)站中,我們更多使用的是bitmaps統(tǒng)計(jì)在線用戶的數(shù)量。

參考文章:http://redis.io/topics/data-types-intro#bitmaps

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,如果有疑問(wèn)大家可以留言交流。

相關(guān)文章

  • 啟動(dòng)redis出現(xiàn)閃退情況的解決辦法

    啟動(dòng)redis出現(xiàn)閃退情況的解決辦法

    最近使用Redis遇到啟動(dòng)閃退的問(wèn)題,查閱資料后在一位大神的文章中找到了答案,這篇文章主要給大家介紹了關(guān)于啟動(dòng)redis出現(xiàn)閃退情況的解決辦法,需要的朋友可以參考下
    2023-11-11
  • Redis緩存數(shù)據(jù)庫(kù)表(列單獨(dú)緩存)的示例代碼

    Redis緩存數(shù)據(jù)庫(kù)表(列單獨(dú)緩存)的示例代碼

    在Redis中緩存數(shù)據(jù)庫(kù)表數(shù)據(jù),而不使用JSON結(jié)構(gòu)來(lái)表示value,通常意味著我們會(huì)將數(shù)據(jù)庫(kù)表的每一行數(shù)據(jù)映射為Redis中的一個(gè)或多個(gè)鍵值對(duì),這篇文章主要介紹了Redis緩存數(shù)據(jù)庫(kù)表(列單獨(dú)緩存),需要的朋友可以參考下
    2024-03-03
  • Redisson 主從一致性問(wèn)題詳解

    Redisson 主從一致性問(wèn)題詳解

    這篇文章主要為大家介紹了Redisson 主從一致性問(wèn)題詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • Redisson分布式限流的實(shí)現(xiàn)原理分析

    Redisson分布式限流的實(shí)現(xiàn)原理分析

    這篇文章主要介紹了Redisson分布式限流的實(shí)現(xiàn)原理分析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • Redis分布式鎖之紅鎖的實(shí)現(xiàn)

    Redis分布式鎖之紅鎖的實(shí)現(xiàn)

    在Redis中,紅鎖是一種分布式鎖的實(shí)現(xiàn)機(jī)制,旨在解決多個(gè)客戶端在分布式環(huán)境中對(duì)共享資源進(jìn)行并發(fā)訪問(wèn)的問(wèn)題,本文主要介紹了Redis分布式鎖之紅鎖的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-12-12
  • Redis解決緩存雪崩、穿透和擊穿的問(wèn)題(Redis使用必看)

    Redis解決緩存雪崩、穿透和擊穿的問(wèn)題(Redis使用必看)

    這篇文章主要給大家介紹了Redis解決緩存雪崩、緩存穿透、緩存擊穿的解決方案,文中有詳細(xì)的圖文介紹,具有一定的參考價(jià)值,需要的朋友可以參考下
    2023-08-08
  • Redis分布式鎖方案設(shè)計(jì)之防止訂單重復(fù)提交或支付

    Redis分布式鎖方案設(shè)計(jì)之防止訂單重復(fù)提交或支付

    這篇文章主要為大家介紹了Redis分布式鎖之防止訂單重復(fù)提交或支付方案設(shè)計(jì)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-09-09
  • 動(dòng)態(tài)添加Redis密碼認(rèn)證的方法

    動(dòng)態(tài)添加Redis密碼認(rèn)證的方法

    本篇文章主要介紹了動(dòng)態(tài)添加Redis密碼認(rèn)證的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-06-06
  • redis 查看所有的key方式

    redis 查看所有的key方式

    這篇文章主要介紹了redis 查看所有的key方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-05-05
  • redis實(shí)現(xiàn)共同好友的思路詳解

    redis實(shí)現(xiàn)共同好友的思路詳解

    微信朋友圈大家都玩過(guò)吧,那么朋友圈的點(diǎn)贊、評(píng)論只能看到自己好友的信息是怎么操作的呢?下面通過(guò)本文給大家分享下此功能的實(shí)現(xiàn)流程,對(duì)redis實(shí)現(xiàn)共同好友的方法感興趣的朋友一起看看吧
    2021-05-05

最新評(píng)論