View on GitHub

笨狗一搏

Be yourself 勿忘初心

统计当前在线用户数、平均访问时长、在线用户最高数等实现

一、需求:

最近做一个统计项目,项目要求统计不同店铺的当前在线用户数、平均访问时长、今日在线用户最高数等需求

二、准备工作:###

在开始实现具体功能之前,首先得弄清楚这些概念以及计算公式(大家有哪里不认同的,欢迎指正,微笑)

三、数据采集:

好了,现在概念应该都明白了,开始进入正题。首先聊下数据采集,目前,我采用的是埋点(包括心跳通知)的方法进行数据采集,一方面使用埋点对所收集的数据比较准确,另外对数据收集相对比较简单。我们使用了两个数据收集接口,第一个即每次打开一个页面都会调用一次的pv收集接口,该接口主要收集当前页面的id、url、标题、上一个页面的地址等信息,该接口会返回一个唯一的pvId,如果用户第一次访问,则会服务端会生成一个唯一的sessionid存放到cookie里面,这个sessionid就用于区分不同用户(这种统计存在一定的偏差:比如同一个用户用不同浏览器打开,会统计成多个用户,暂时忽略这种偏差),另一个接口就是心跳通知接口,即打开某个页面后(成功调用第一个接口后),每10s请求一次服务端(带上上一个接口的pvId),通过该接口服务端就知道用户仍然保留该页面。

四、现在来开始看具体的统计:

五、总结:

个人认为,实现这次统计,有几个关键点:redis key的失效事件监听,然后就是mongodb一些查询,这些会在下周贴上具体代码。另外就是有两个地方使用任务处理,个人认为不是最佳方案,对于是否要用任务处理,或者有更好更合适的方案,欢迎大家讨论!