国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > Redis > 正文

利用Redis統計網站在線活躍用戶的方法

2020-03-17 12:39:10
字體:
來源:轉載
供稿:網友

前言

在工作中我們經常遇到這樣的需求,要對某個在線網站的活躍用戶數量進行統計。這里我們以redis/52110.html">redis/224545.html">redis為例,說明一下其實現的過程。

實現方法

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串連續的二進制數字(0或1)。我們通過對其某個位上的數值進行設置為1,然后通過bitcount函數統計這串二進制數字上為1的總數,從而得到當前活躍的用戶總數。

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

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

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

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

總結

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


注:相關教程知識閱讀請移步到Redis頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 上林县| 肇东市| 华坪县| 泰安市| 宁南县| 确山县| 锡林郭勒盟| 九龙坡区| 威宁| 灵川县| 顺昌县| 高碑店市| 赤壁市| 阳泉市| 安福县| 勐海县| 泽库县| 牙克石市| 元朗区| 友谊县| 正镶白旗| 湟中县| 兴宁市| 望奎县| 日喀则市| 万宁市| 二连浩特市| 潢川县| 重庆市| 靖西县| 长丰县| 云阳县| 郓城县| 平邑县| 平原县| 鲁甸县| 大城县| 崇阳县| 信宜市| 满城县| 会同县|