前后端分离的web社区类项目,如何统计在线人数
看到过一个有趣的做法,就是 v2ex 的站长早些年发的一个帖子。
使用一个单独的 Redis 数据库每个在线用户是一条带有 TTL 的记录,在每次 Session 开始时写入这条记录到 Redis需要统计当前有多少人在线的话,只需要在这个数据库上用 dbsize() 就可以获得,不会遇到 keys() 可能带来的性能问题
来源:关于用 Redis 做在线人数统计 - V2EX
原文下方,还有很多人给出了不同的方案,也可以用来作为参考
在线人数,指的是实时使用的人数?感觉得使用 websocket 进行实时上报埋点?
不知道这个指标有什么用呢?一般产品统计看的是 PV、UV 这样,这种是比较容易实现的
这种一般可以在用户登录、Session 被刷新时对状态进行更新(在线)在 Session 和 登录过期 时更新为(离线)
这种方法的统计极度不准确。还有一种方法:
用户在线的时候定期给服务端发送一个心跳包,间隔可以长一点如果在一定时间内没收到某用户心跳包,在线人数 - 1
WebSocket 的话可能会有一点浪费了。毕竟用户量一大就会开蛮多连接的。
记录一下用户最后活跃时间,最后活跃时间之前的某段时间,都可以视为在线用户。
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
暂无简介
文章 0 评论 0
接受
发布评论
评论(4)
看到过一个有趣的做法,就是 v2ex 的站长早些年发的一个帖子。
来源:关于用 Redis 做在线人数统计 - V2EX
原文下方,还有很多人给出了不同的方案,也可以用来作为参考
在线人数,指的是实时使用的人数?感觉得使用 websocket 进行实时上报埋点?
不知道这个指标有什么用呢?一般产品统计看的是 PV、UV 这样,这种是比较容易实现的
这种一般可以在用户登录、Session 被刷新时对状态进行更新(在线)
在 Session 和 登录过期 时更新为(离线)
这种方法的统计极度不准确。还有一种方法:
用户在线的时候定期给服务端发送一个心跳包,间隔可以长一点
如果在一定时间内没收到某用户心跳包,在线人数 - 1
WebSocket 的话可能会有一点浪费了。毕竟用户量一大就会开蛮多连接的。
记录一下用户最后活跃时间,最后活跃时间之前的某段时间,都可以视为在线用户。