在每个X页面视图上运行PHP函数(替代cron)

时间:2017-01-05 09:22:41

标签: php

我正在做一些涉及单个数据库查询的错误检查。错误是测试cron作业是否已停止工作,因此本质上我不想使用cron作业来运行PHP函数。

我没有在每个网页浏览上运行数据库调用,而是考虑了一种不同的方法,每隔X次浏览运行一次"是减轻负荷的好方法。

这不是我所听说过或者可以寻找的东西 - 这让我觉得这是一个更好的选择。非常有兴趣听取利弊。

1 个答案:

答案 0 :(得分:5)

如果您正在使用PHP会话,实际上您可能已经在每次调用中使用完全相同的机制。 PHP会话垃圾收集器完全相同 - 随机删除过期的会话。

请参阅:https://secure.php.net/manual/en/sessionhandler.gc.php

  

清理过期的会话。当会话启动或调用session_start()时,由PHP在内部随机调用。调用此频率基于session.gc_divisor和session.gc_probability配置指令。

要做到这一点,只需滚动一个随机数并检查它是否高于"百分比"你需要:

$roll = mt_rand(1, 100);

if ($roll > 90) {
  // This will fire in 10% of cases
  // Do what you need
}

但重要的是要考虑:

  1. 即使你在99%的情况下将其设置为射击,它仍然可能最终不能连续100年射击。这非常类似于概率论的工作原理。
  2. 如果您的流量较低(通常或某些特定日期),您的检查代码现在可能会触发,您可能会错过任何错误。
  3. 此外,您的支票总是有可能由同一时刻查看页面的两个不同用户同时启动两次。所以你可能想确保这不会给你带来任何问题,特别是如果你在支票上做了任何更新。
  4. 小心不要在你的支票上做繁重的工作,因为这样你的一些请求会经历更高的响应时间(我知道,但是为了完整性。而且因为它实际上让我有点几次)。
  5. 第1点和第2点将此机制从'#34;可靠"对于那些不是非常重要的东西,或者作为另一种可靠机制的附加保护措施,并不是非常可靠的。

    所以,我会说 - 衡量一切,如果你还想要它 - 继续使用这个机制。