cloudzhou
2013-05-24 11:16:35 +08:00
我给你一个现实的解决方案吧,判断用户时间在线基本是用户的各种点击浏览行为,每次点击都可以更新用户的最近活跃时间,一般以最近10分钟(也可以其他时间)来认为这段时间内的用户是在线的,两种方法:
1)数据库,每个点击都是update用户最近活跃时间,用户是否在线就是看时间是否在范围内,总在线人数就是 count 所有在时间范围内
这种做法对数据库压力非常的大,所以要善用 nosql,第二种解决方法:
2)使用redis Sorted sets,逻辑上是一样的,就是有来了就update,然后定时清空超过一定时间的用户,剩下的这个 redis Sorted sets 就都是在线用户了,只需要判断用户是否在这个set里面就可以了
在现实实践中有很多小技巧,如果人数真的千万级别,那么可以考虑按照一定随机比例来更新状态,存在一定误差,还有对于常驻内存的应用,比如 jvm,可以实现一定的数据结构,先在内部做存储,然后统计到远程数据库或者 nosql,其实这是队列机制的思想。