这篇文章主要是分享一下我这个博客下方的那个当前在线人数部分的代码,其实是一个五分钟之内的统计,数据保存在memcache中。
整个逻辑很简单,每一个用户访问,我都会把用户的ip作为key放到memcache,然后有一个 online_ips 的key,用来存放所有的ip。
每次请求都会进行如下步骤,先取出 online_ips的所有值,然后再根据这个这个list来从memcache中取出依然存在的ip,然后再次存入 online_ips 。
具体实现来看代码:
if 'HTTP_X_FORWARDED_FOR' in request.META: ip = request.META['HTTP_X_FORWARDED_FOR'] else: ip = request.META['REMOTE_ADDR'] online_ips = cache.get("online_ips", []) if online_ips: online_ips = cache.get_many(online_ips).keys() cache.set(ip, 0, 5 * 60) if ip not in online_ips: online_ips.append(ip) cache.set("online_ips", online_ips)
这段代码是在middleware层的,展示在线人数的时候,只需要从cache中取出online_ips即可。
转载请注明:爱开源 » Django统计在线人数