rails统计有效用户数
现在做一个类似于论坛论坛,需求那边要我在后台做一个登录有效用户数的统计(同一个用户登录几次都算一个)。

我采取了一个比较笨的方法,在用户登录时记录他的ID,取出数据转化成数组array,再用array.include?()方法判断是否记录过,没记录过就加入到数组中,再把这个数组转换成字符串存到数据库。

现在登录的人比较少,但当已经有数据庞大时再转化成数组对白实在太笨了,因为我在Action的方法是判断完再跳转到主页的,这对用户体验十分不好。

不知道大家有什么好的办法呢?或者rails已经有很好的插件实现了?

3个回答

[quote]
我采取了一个比较笨的方法,在用户登录时记录他的ID,取出数据转化成数组array,再用array.include?()方法判断是否记录过,没记录过就加入到数组中,再把这个数组转换成字符串存到数据库。

现在登录的人比较少,但当已经有数据庞大时再转化成数组对白实在太笨了,因为我在Action的方法是判断完再跳转到主页的,这对用户体验十分不好。 

[/quote]
你是对的,内存里放一个大数组,能避免就避免。而且,登录的时候,还要等一个action,也需要避免。

我的话,可能采取如下的办法
建立一个log表,登录的时候,写log。根据当前用户多少,和实时的需求情况。有两种写法,一个是简单log没有什么逻辑就是一个记录。一个是,稍微有点逻辑看看是不是记录的那种。

当然,通常就是前一种就是有什么记录什么,因为,便于以后统计,也便于优化。

然后,要显示在线人数,和在线情况呢,就从表里读。这个可以压到数据库里,简单的呢,就是triger或者存储过程,数据量实在大呢,就写个user-function或者cron job,专门,后台跑统计。

当然,实时性会没有那么高,但也差不出多少。好处就是,生成多种报表啊,报告啊啥的比较容易,用户登录的时候,没有延迟。

个人想法,至于,有没有做这个的插件,还真没注意

楼上提的两个方案都可行 我一直在统计都是这样设计的 根据需求 选一种合适的方案

用redis的set结构 能够很简单的解决这个问题
  设置一下过期时间,因为是set,不存在重户问题,你只要把id住里面放就行了

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!