全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

利用Redis统计网站在线活跃用户的方法

前言

在工作中我们经常遇到这样的需求,要对某个在线网站的活跃用户数量进行统计。这里我们以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  # 统计活跃用户  # 统计在线人数  # 在线用户统计  # Redis中统计各种数据大小的方法  # PHP使用redis位图bitMap 实现签到功能  # java redis 实现简单的用户签到功能  # SpringBoot使用Redis的zset统计在线用户信息  # 基于Redis位图实现用户签到功能  # Redis基于Bitmap实现用户签到功能  # SpringBoot整合Redis实现访问量统计的示例代码  # 微服务 Spring Boot 整合 Redis BitMap 实现 签到与统计功能  # PHP利用redis位图实现简单的签到功能  # Redis如何统计用户访问量  # SpringBoot+Redis BitMap实现签到与统计的项目实践  # 我们可以  # 的是  # 二进制数  # 在这里  # 还可以  # 将其  # 对其  # 分别为  # 为例  # 要对  # 这篇文章  # 将它  # 设置为  # 来实现  # 用户登录  # 在工作中  # 时将  # 移除  # 下表  # 上为 


相关文章: 学校为何禁止电信移动建设网站?  武汉网站制作费用多少,在武汉武昌,建面100平方左右的房子,想装暖气片,费用大概是多少啊?  移民网站制作流程,怎么看加拿大移民官网?  专业网站建设制作报价,网页设计制作要考什么证?  如何在腾讯云服务器上快速搭建个人网站?  Android滚轮选择时间控件使用详解  如何快速生成凡客建站的专业级图册?  如何选择高效响应式自助建站源码系统?  如何选择建站程序?包含哪些必备功能与类型?  专业公司网站制作公司,用什么语言做企业网站比较好?  婚礼视频制作网站,学习*后期制作的网站有哪些?  云南网站制作公司有哪些,云南最好的招聘网站是哪个?  建站之星后台密码遗忘或太弱?如何重置与强化?  在线教育网站制作平台,山西立德教育官网?  建站主机与虚拟主机有何区别?如何选择最优方案?  娃派WAP自助建站:免费模板+移动优化,快速打造专业网站  孙琪峥织梦建站教程如何优化数据库安全?  如何实现建站之星域名转发设置?  如何确保西部建站助手FTP传输的安全性?  桂林网站制作公司有哪些,桂林马拉松怎么报名?  如何制作算命网站,怎么注册算命网站?  如何配置FTP站点权限与安全设置?  5种Android数据存储方式汇总  如何通过FTP服务器快速搭建网站?  建站主机是什么?如何选择适合的建站主机?  公司网站建设制作费用,想建设一个属于自己的企业网站,该如何去做?  东莞专业网站制作公司有哪些,东莞招聘网站哪个好?  在线ppt制作网站有哪些软件,如何把网页的内容做成ppt?  IOS倒计时设置UIButton标题title的抖动问题  Swift中swift中的switch 语句  如何快速完成中国万网建站详细流程?  网站制作公司排行榜,四大门户网站排名?  如何在局域网内绑定自建网站域名?  Python路径拼接规范_跨平台处理说明【指导】  广州网站建站公司选择指南:建站流程与SEO优化关键词解析  巅云智能建站系统:可视化拖拽+多端适配+免费模板一键生成  小程序网站制作需要准备什么资料,如何制作小程序?  如何在IIS中新建站点并配置端口与物理路径?  如何在IIS7中新建站点?详细步骤解析  建站VPS能否同时实现高效与安全翻墙?  创业网站制作流程,创业网站可靠吗?  香港服务器网站卡顿?如何解决网络延迟与负载问题?  建站主机选哪种环境更利于SEO优化?  如何用美橙互联一键搭建多站合一网站?  如何通过.red域名打造高辨识度品牌网站?  ,怎么用自己头像做动态表情包?  阿里云网站制作公司,阿里云快速搭建网站好用吗?  SQL查询语句优化的实用方法总结  seo网站制作优化,网站SEO优化步骤有哪些?  盐城做公司网站,江苏电子版退休证办理流程? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。