繁体   English   中英

在django Web应用程序中实现“上次看到”功能的最佳方法是什么?

[英]What is the best way to implement a 'last seen' function in a django web app?

我有一个正在运行的django / apache2 + memcached应​​用程序(ubuntu),并希望跟踪登录的在线用户。

追踪这个的最佳方法是什么?

每次登录用户加载页面时,我宁愿不写入数据库; 但还有其他选择吗?

一种方法可能是:

您创建了一个在process_response上执行以下操作的中间件:

  • 检查名为“在线”的cookie,但仅限用户进行身份验证
  • 如果没有饼干,
    • 设置一个名为'online'的cookie,其值为'1'
    • 将cookie的生命周期设置为10分钟
    • 使用当前日期时间更新此用户的auth.User的“last_login”字段

现在,您已在auth.User表中拥有所有当前登录的用户。 last_login比datetime.now() - interval(15分钟)更新的所有用户可能被视为“在线”。

将每隔10分钟为每个登录用户编写数据库。 根据需要调整值“10”和“15”。

这里的优点是数据库写入很少(根据您的两个数字设置10/15)。 对于速度优化,请确保将last_login编入索引,因此包含Count的此字段的过滤器非常快。

希望这可以帮助。

内存中的散列映射或队列,每小时左右运行一个任务以保留它。

您需要保持信息服务器端,完整性并不重要,吞吐量和延迟很重要。 这意味着你应该使用某种键值存储。

Memcached和redis的密钥已过期。 你可能已经安装了memcached,所以使用它。

您可以重置user:last-seen:$username到期时间user:last-seen:$username每次访问都需要user:last-seen:$username键,或者您可以使用mawimawi的cookie技术并且有expiry = 4 * cookie-lifetime。

你不能在不使用数据库/持久存储的情况下在django中这样做,因为django会话存储在数据库中的原因相同:你的应用程序可能有多个实例在运行,必须通过一个持久性同步它们的状态+数据来源[1]

或者,您可能希望将此信息写入以用户标识命名的文件中的文件夹中,然后检查其创建/修改日期以查找所需信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM