【问题标题】:who's online with timestamp with high performance谁在线具有高性能的时间戳
【发布时间】:2012-11-02 12:38:50
【问题描述】:

我刚刚创建了一个带有 php 会话的用户登录系统,现在用户可以注册并登录到站点并做其他事情...

现在我想创建 online.php 它将获取所有在线用户。我几乎在 google 和 stackoverflow 中搜索所有内容但没有成功。

好的,现在我想描述一下我想以高性能创建的系统.. 当用户登录时,我们只需更新表 user.lastlogin 这是一个时间戳,然后在 online.php 中我们选择 * 每个时间间隔小于 5 分钟的用户。 为此,当用户加载每个页面时,我可以在数据库中更新此时间戳lastlogin 字段,这会花费很多 mysql 查询来完成这项工作......然后在每个页面加载中我必须更新

更新user 设置last=now()

这将花费我很多 mysql 查询。现在我正在寻找另一种方式,例如使用会话或我在 this link 中找到的东西

“通常的解决方案是在表中存储一个时间戳,每次用户执行某项操作时都会更新该时间戳。具有最近时间戳(例如五分钟)的用户显示为已登录,其他所有人都已注销。

它甚至不必在每次页面加载时都更新。在会话中也保留最后一次更新时间的时间戳,并且仅在数据库标志即将到期时更新表。”

但不幸的是,答案并没有太大帮助,我需要一个示例或更多关于此的描述。

【问题讨论】:

  • 或者如果有更好的方法。请指导我这样做。
  • 您是绑定到 mysql 还是可以添加其他更适合这种情况的数据存储?
  • 您的会话是如何存储的?
  • 难道没有办法只计算该网站上 PHP 中所有打开的会话服务器端吗?像系统变量一样?顺便说一句,你并不孤单:stackoverflow.com/questions/679657/find-number-of-open-sessions
  • “我们select *”。如果您担心性能,您可能想要select count(1)。另外,是的,每次网页浏览都会导致一次查询,但是,您实际期望多少次查询?一个查询(尤其是优化的查询)不应成为瓶颈。您可能正步入过早优化的领域。那是个糟糕的地方。

标签: php performance


【解决方案1】:

1.) 如果您需要更快的会话速度,例如 memcache。一个简单的键值存储来保存您的会话或密钥。您可以将 Apache 配置为所有会话将自动存储在 memcache 中。

2.) 另一种解决方案是制作一个 MEMORY Table,MySQL 将其保存在 RAM 中。问题是当您重新启动服务器时,此表中的数据会丢失。但我认为在你上次登录的情况下没有问题。

3.) PHP 共享内存:http://php.net/manual/de/ref.shmop.php 用于小数据。

当您实施解决方案时,我更喜欢 MEMORY Table 或 SHM 解决方案。

编辑:最后一段在硬盘上搜索与顶部的评论有关:Find Number of Open Sessions

【讨论】:

  • 次要语言建议,因为它可能不清楚(所以没有冒犯的意思)。最后一段应该是Then searching->Because searchingWhen you have implemented->If I had to implement吗?
  • 我已经删除了与上面答案相关的句子。
  • really tnx for answer...然后在每个页面更改中使用内存表和更新将是最好的方法?页面加载,因为我认为更新每个页面加载会损害我网站的性能。例如,如果我们有 100000 个用户在线,那么一秒钟内 100000 个查询将是最好的解决方案?服务器可以处理吗??
  • 我喜欢你的 2 号解决方案,因为我在每次登录时更新 lastlogin,然后当服务器崩溃或重新启动时不会有问题,但我还有另一个问题..在这个内存表中我必须有多少行制作??我是否应该删除我之前在表user 中创建的这个时间戳行,并将这个时间戳行添加到另一个内存格式的表中,这将在每个页面加载时更新???..我没明白这一点请解释一下方法more.really tnx :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-19
  • 1970-01-01
  • 2016-08-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多