我有一个正在运行的django / apache2 + memcached应用程序(ubuntu),并希望跟踪已登录的在线用户。
跟踪此问题的最佳方法是什么?
每次登录用户加载页面时,我宁愿不写入数据库;但还有其他选择吗?
答案 0 :(得分:4)
方法可能是:
您创建了一个在process_response上执行以下操作的中间件:
现在您已在auth.User表中拥有所有当前登录的用户。 last_login比datetime.now() - interval(15分钟)更新的所有用户可能被视为“在线”。
每隔10分钟就会为每个登录用户编写数据库。根据需要调整值“10”和“15”。
这里的优点是数据库写入很少(根据您的两个数字设置10/15)。对于速度优化,请确保将last_login编入索引,因此包括Count在内的此字段的过滤器非常快。
希望这有帮助。
答案 1 :(得分:1)
内存中的散列映射或队列,每小时左右运行一次任务以保留它。
答案 2 :(得分:1)
您需要坚持信息服务器端,完整性并不重要,吞吐量和延迟非常重要。这意味着你应该使用某种键值存储。
Memcached和redis的密钥已过期。你可能已经安装了memcached,所以使用它。
您可以在每次访问时重置user:last-seen:$username
密钥的到期时间,或者您可以使用mawimawi的cookie技术并且有效期= 4 * cookie-lifetime。
答案 3 :(得分:0)
你不能在不使用数据库/持久存储的情况下在django中这样做,因为django会话存储在数据库中的原因相同:你的应用程序可能有多个实例在运行,必须通过它们同步状态+数据一个持久性源[1]
或者,您可能希望将此信息写入以用户标识命名的文件中的文件夹中,然后检查其创建/修改日期以查找所需信息。