如何统计网站的在线人数呢?

首先很简单的思想就是,如果只针对会员用户进行统计,在登录登出时加判断,然后维护一个表(或者其他存储方式)来存储在线会员即可。

但是有个问题就是,对于正常退出的会员当然可以使用这种方式,那如果该会员是关闭了网页或者停电或者其他因素,那如何得知这些情况呢?

1. 维护在线用户表

假设使用数据库来完成这个功能,想要达到最快的速度,就直接使用MYSQL内存表来保存在线会员的记录,
1:当会员登录时(包含自动登录),便去查找该会员是否存在于内存表当中,如果存在,则更新在线表当中的时间,如果不存在,则插入相应数据到内存表当中去

2:在用户退出时,由于没有进行办法实时的更新,因为用户有可能直接关闭网页离开,只能根据时间段来解决这个问题,写一个计划任务,每隔半个小时(或者其他时间),执行一次该程序,该程序主要的作用是扫描当前在线表当中,更新时间是否有小于当前时间10分钟或者多少分钟(这个根据具体情况自定义)的,如果有,则直接删除该条记录,这样便保证了大概的在线人数的统计。

这种做法的缺点,当用户数量很大时,对数据库压力会很大。

2. 使用Redis统计

将第一种方案的数据库改成使用redis,能够减轻数据库的负担,读写也更快。

当然我们可以从另一个角度来看,如果要统计的不仅仅是会员,要统计来访问网站的在线人数,我们可以考虑保存session(详情请查看服务器集群session共享),当session过期时则删除记录,相比于第一种方案,这种方案准确率就低了很多,但是性能更好。

3. 统计活跃用户

这里要提到的另一种思考是,如何统计网站的活跃用户呢?(比如把每天都登录称为活跃用户)

假设某网站有1亿用户,就算平均每天登录3000W用户,这个数据每天也相当庞大。

这里可以使用bitmap来保存用户登录状况,因为是否登录其实就是0/1,所以只用一位来保存就够了。这样存储就大大降低了。

我们把每天的用户登录信息记录到一个key中,值中的每个offset的值就是用户登录的标识

(1)设置关键字的指定offset的值为 0 或 1

setbit key 100 1

(2)bit运算

例如

key1 -> 0101
key2 -> 0011

and 运算

bitop and ret key1 key2

就是对 key1 key2 各位进行 and 运算后赋值给 ret,结果为 0001

or 运算

bitop or ret key1 key2

就是对 key1 key2 各位进行 or 运算后赋值给 ret,结果为 0111

(3)bit值为1的数量

bitcount key

通过bit操作就可以实现用户统计的需求了

例如今天为 2016-05-28
把 key 定义为 userlogin:20160528

(1)用户登录

ID为 100 的用户登录了,执行

setbit userlogin:20160118 100 1

(2)统计今天登录的用户数

bitcount userlogin:20160118

(3)统计3天内都登录过的用户

“都登录过”是要取得bit值都为1的,通过 and 计算获取

bitop or ret userlogin:20160116 userlogin:20160117 userlogin:20160118

(4)统计7天内登录过的用户

“登录过”表示bit值有一个为 1 即可,所以通过 or 计算获取

命令与上一个类似

Reference:

1. http://bbs.csdn.net/topics/330154127

2. http://blog.edagarli.com/2016/01/20/%E4%BD%BF%E7%94%A8Redis%E7%BB%9F%E8%AE%A1%E6%B4%BB%E8%B7%83%E7%94%A8%E6%88%B7/

如何统计网站的在线人数呢?相关推荐

  1. 12-监听器实现统计网站当前在线人数

    在 javaweb 项目中,利用监听器,实现统计网站当前在线人数 1.新建一个实现 HttpSessionListener 接口的实现类 OnlineCountListener.java packag ...

  2. 统计网站用户在线人数

    问题: 一个网站如何统计自己用户(这里的用户包含游客)的在线人数? 分析: 首先,我遇见问题喜欢先分析下思路. 用什么技术,可以监听用户访问服务器?  (监听器) 用那些技术,可以实时的存储每次登陆服 ...

  3. 使用监听器实现一个统计网站在线人数的示例

    (1)创建一个监听器实现类 要大致统计一个网站的在线人数,首先,可以通过ServletContextListener监听,当Web应用上下文启动时,在ServletContext中添加一个List,用 ...

  4. SpringBoot-心跳机制+redis实现网站实时在线人数统计

    在社交网站中,通常需要实时统计某个网站的在线人数,通过该指标来实时帮助运营人员更好的维护网站业务: 先说一下目前在市面上主流的做法再加上我自己查阅的资料总结: 创建一个session监听器,在用户登录 ...

  5. Javaweb Listener监听器的简单应用:统计网站在线人数

    Listener监听器实现统计网站在线人数 开发环境: IntelliJ IDEA 一.什么是监听器 是指专门用于对其他对象身上发生的事件或状态改变进行监听和相应处理的对象,当被监视的对象发生变化时, ...

  6. java如何统计系统浏览人数_java网站如何统计访问量和在线人数实例源码

    java网站如何统计访问量和在线人数实例源码.简言之,如果不用第三方提供的接口 那最好的解决方案应该是当SESSION建立时sessionCreated(),在访问总数和当前在线人数上+1 当SESS ...

  7. 监听器应用【统计网站人数、自定义session扫描器、踢人小案例】

    2019独角兽企业重金招聘Python工程师标准>>> 从第一篇已经讲解过了监听器的基本概念,以及Servlet各种的监听器.这篇博文主要讲解的是监听器的应用. 统计网站在线人数 分 ...

  8. PHP+MySQL实现精确统计网站访问量(IP个数)

    基于WordPress的网站有很多统计功能.但是只能统计文章阅读数.不能统计访客人数.以下代码可以实现获取来访用户的IP地址,一个IP对应一次访问.即使刷新也不会增加访问量.这个非常精确. 1.创建一 ...

  9. Python统计网站访问日志log中的IP信息,并排序。。

    Python统计网站访问日志log中的IP信息,并排序,打印排名靠前的IP及访问量.示例代码如下: #!/usr/bin/env pythonipdict = {}file = open(" ...

最新文章

  1. Mono 把 .NET 应用程序移植到 Linux
  2. Deap: python中的遗传算法工具箱
  3. sql datetime转字符串_datetime的用法,时间戳转换
  4. [转载] Java中的字符串处理
  5. Spark源码分析:多种部署方式之间的区别与联系
  6. mysql某个表被行锁了_一文搞懂MySQL行锁、表锁、间隙锁详解
  7. 信息学奥赛一本通1368 对称二叉树
  8. 基于OpenCV3.0的车牌识别系统设计(二)--车牌提取
  9. django 1.8 mysql_mysql - 升级1.7.4到django 1.8 south.db.mysql错误,不使用南 - 堆栈内存溢出...
  10. qiankun 出现[import-html-entry]: error occurs while executing normal script
  11. L-TAGE预测器 “A 256 Kbits L-TAGE branch predictor”
  12. vue自定义指令—directive详解
  13. 电商评论文本情感分类(中文文本分类)(第二部分-Bert)
  14. 确保软件开发生命周期(SDLC)的安全
  15. 零基础入门金融风控-贷款违约预测-Task05——模型融合
  16. 用Django加PIL做一个证件照模板生成器网页
  17. Dell B1260dn Printer驱动的安装
  18. GetElementById
  19. 20 October in ss
  20. ubuntu桌面之路-续三

热门文章

  1. 《悲情曹雪芹》——诗篇总结
  2. 元素垂直居中,有几种方法?
  3. 王子与公主的爱情故事新结局
  4. 中文版Geneve02
  5. 马云最新撰文:公司假口号越多 员工士气越低落
  6. 云顶之弈怎么防止被机器人拉_云顶之弈:只有钻石玩家才知道的12个小技巧,都是干货!...
  7. word文件图标无法显示的问题
  8. Uniapp开发仿哔哩哔哩/短视频系统APP源码
  9. 程序员前辈归纳整理Python中的控制流语句的知识点(要记得收藏)
  10. win10蓝牙不能用