时间:2021-05-23
前言
在工作中我们经常遇到这样的需求,要对某个在线网站的活跃用户数量进行统计。这里我们以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
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本文实例讲述了php实现统计网站在线人数的方法。分享给大家供大家参考。具体实现方法如下:$val){$val=trim($val);if($val!=""){l
随着智能手机市场的不断扩大,手机网站在移动端用户群中的使用范围越来越广。越来越多的用户通过手机网站实现在线交易,手机网站在便利用户的同时,又为企业带来了什么
百度网站在线刷网址ip关键词优化要注意哪些事项!一个好的网站在线刷网址ip应该是尽量做好让用户喜欢我们的网站在线刷网址ip,让自己的网站在线刷网址ip受到欢
一个统计当前在线用户的解决方案在做一个在线交流的网站时,有个问题很令我头疼,就是关于实时统计在线用户的问题,客户要求:统计当前在线人数、游客人数、会员人数、在线
本文实例讲述了PHP+jquery实时显示网站在线人数的方法。分享给大家供大家参考。具体分析如下:在线人数最简单的就是直接利用js调用php,这样可以显示出有多