主頁 > 知識庫 > 利用Redis統(tǒng)計網站在線活躍用戶的方法

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

熱門標簽:鐵路電話系統(tǒng) 百度競價排名 服務外包 呼叫中心市場需求 網站排名優(yōu)化 Linux服務器 地方門戶網站 AI電銷

前言

在工作中我們經常遇到這樣的需求,要對某個在線網站的活躍用戶數量進行統(tǒng)計。這里我們以redis為例,說明一下其實現(xiàn)的過程。

實現(xiàn)方法

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

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

這里我們引入redis庫,然后實例化了1個StrictRedis類。由于這里使用的默認的選項,我們可以在StrictRedis不傳入任何參數。

r = redis.StrictRedis()

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

下面我們來看storeDailyVisit函數:

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

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

當某個用戶登錄后,我們調用該函數,傳入今天的日期及用戶的ID。removeDailyVisit函數與storeDailyVisit函數類似,它主要負責當用戶退出當前網站時將其從bitmap表中移除。

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

下面我們通過countVisits函數得到當前活躍的用戶的數量:

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

這里,countVisits函數接收1個日期的參數,它通過調用bitmaps數據類型的bitcount函數得到當前數字為1的個數。這里我們將它返回給調用者。

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

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

| 數據類型 | 每個消耗的位 | 存儲用戶 | 消耗的內存 |
|———-|—————|————|——————|
| bitmap | 1bit | 500000000 |1*500000000B=59.6Mb|
| set | 32bit | 500000000 |32*500000000B=1.91Tb|

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

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

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流。

您可能感興趣的文章:
  • PHP+Redis 消息隊列 實現(xiàn)高并發(fā)下注冊人數統(tǒng)計的實例
  • PHP使用redis實現(xiàn)統(tǒng)計緩存mysql壓力的方法
  • Redis中統(tǒng)計各種數據大小的方法
  • 基于redis實現(xiàn)token驗證用戶是否登陸
  • redis 實現(xiàn)登陸次數限制的思路詳解
  • redis開啟和禁用登陸密碼校驗的方法
  • 基于Redis位圖實現(xiàn)系統(tǒng)用戶登錄統(tǒng)計

標簽:仙桃 衡水 蘭州 崇左 黃山 湘潭 銅川 湖南

巨人網絡通訊聲明:本文標題《利用Redis統(tǒng)計網站在線活躍用戶的方法》,本文關鍵詞  ;如發(fā)現(xiàn)本文內容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內容系統(tǒng)采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266