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



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

与在每个页面视图上运行数据库调用不同,我认为"每X个页面视图运行一次"的不同方法将是减轻负载的好方法。

这不是我听说过的,也不是我可以寻找的——这让我觉得还有更好的选择。很想听听赞成/反对意见。

如果您使用的是PHP会话,那么实际上您在每次调用中都使用了完全相同的机制。PHP会话垃圾收集器也做同样的事情——随机删除过期的会话。

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

清理过期会话。当会话启动或调用session_start()时,PHP在内部随机调用。调用它的频率基于session.gc_visor和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. 小心不要对你的支票做繁重的工作,因为这样你的一些请求会经历更高的响应时间(我知道,但为了完整性。因为它实际上咬了我几次)

第1点和第2点将该机制从"可靠"类别移至"不太可靠,无论是对于无论如何都不是超级重要的东西,还是作为另一个可靠机制的额外保障"。

所以,我想说——权衡一切,如果你仍然想要的话——继续使用这个机制。

最新更新