2016-07-04 21:49:54 4761次浏览 4条回答 10 悬赏 100 金钱

怎么知道用户是否在线的?如何设计

最佳答案

  • ╃巡洋艦㊣ 发布于 2016-07-05 07:50 举报

    首先,建一个MEMORY引擎的表tbl_online,字段分别为ip, time,当用户访问的时候,先判断此ip是否存在于表tbl_online,如果不存在,插入一条新记录,如果存在,更新time。在线会员,可以把ip写成用户的id。
    然后,写一个计划任务,每分钟执行一次。比如,咱们网站在线的定义为半小时访问过,所以计划任务会把time在半小时之外的删除掉。

    其实MEMORY引擎已经很快了,可以看做是对内存的操作。当然如果换成cache会更好。

    7 条回复
    回复于 2016-07-05 08:36 回复

    谢谢站长!!

    回复于 2016-07-10 21:26 回复

    可以直接存在redis里,设置过期时间,就不需要定时任务

    回复于 2016-07-11 06:18 回复
    回复于 2016-07-16 22:51 回复

    ,舰长,有问题请教。
    上面有同学提到可以是用redis这类缓存,但是我觉得有问题;tbl_online是一个存储用户访问信息的数据表,如果用redis来存储的话,
    1 按照什么样的方式存储每个online信息,是否每个online信息都要一个唯一的键值来代替?还是所有的online ip信息使用一个键值,例如onlineip_info,然后存储的值是一个巨大的数组,包含所有在线ip用户的信息
    2 如果是每个online ip使用唯一的键值,例如online_ip1.1.1.1, online_ip1.2.2.2, 那么怎么统计redis里面有多少个online_ip信息?我看到cache api里面没有这样的统计接口。
    3 如果是所有的online ip使用一个键值,那么就涉及到每次要对一个巨大的数组做操作,性能肯定是问题。
    综上所述,我觉得使用cache来存储是有问题的,请赐教我是不是哪里理解有问题。

    回复于 2016-07-17 08:00 回复

    考虑到$key=>$value型的统计计算问题,所以最终采用了sql的方式。

    回复于 2016-07-18 09:56 回复


    同意,我也是这么考虑了一圈,发现用 cache做统计不现实;
    如果要想使用redis/memcache的高性能,那么是不是只能再建立一个数据库,然后系统频频繁操作的数据在这个数据库上操作。

    回复于 2016-07-18 10:02 回复

    本站目前是一个库,当然能你能分开更好。

  • 回答于 2016-07-07 11:21 举报

    两种方式

    1.用户表里有个字段 代表 此用户是否在线
    2.设计一张在线用户表 用户登录之后 写此表

    5 条回复
    回复于 2016-07-22 08:50 回复

    我在user表中加了一个字段,last_login_time,当用户登录的时候就把 time() 赋值给它;然后就可以判断:1、用户的最后登录时间。2、查找 last_login_time 字段在半个小时之内的用户算在线用户。

    回复于 2016-07-22 09:18 回复

    如果我 3:00 登录,3:05 下线。那 3:10 的在线人数,包括我么?

    回复于 2016-07-22 09:30 回复

    包括的,统计的是半个小时之内的用户

    回复于 2016-07-22 09:46 回复

    可我 3:05 已经下线了

    回复于 2016-07-22 10:44 回复

    如果这样你就统计实时的咯………………

  • 回答于 2016-07-08 12:04 举报

    ‘当用户访问的时候’是指访问任何页面,那就是在任何一个页面都要进行判断么?

    3 条回复
    回复于 2016-07-08 12:30 回复

    写在基类里就可以了。

    回复于 2016-07-13 12:23 回复

    要是以有项目 没基类昵。基类就是 Controller 要改源码?

    回复于 2016-08-28 20:41 回复

    直接些视图下的view也就可以的啊

  • 回答于 2019-01-30 19:38 举报

    Good.

您需要登录后才可以回答。登录 | 立即注册
鲁鲁槟
副总裁

鲁鲁槟 东莞

注册时间:2015-12-02
最后登录:2024-03-11
在线时长:124小时32分
  • 粉丝110
  • 金钱5620
  • 威望140
  • 积分8260

热门问题