每分钟都通过CRON发送电子邮件 - 我的方法可以改进吗?

时间:2012-09-16 00:59:36

标签: php mysql performance optimization cron

我正在制作提醒类型的网站,您可以在其中设置要发送给自己的提醒,设置提醒时间,当时间发生时,您将收到一封电子邮件。

然而,提醒并不重要,延迟大约5-10分钟是可以接受的。

我有两个选择:

1)每分钟运行一次cron脚本。该脚本将检查在为CURTIME()安排的数据库中是否有任何事件,(如果cron在5:35:30运行,它将检查在5:35:00设置的任何提醒)。如果没有找到,请终止。如果找到,请发送电子邮件。

2)或者,我可以每10分钟运行一次Cron脚本。此脚本将检查从现在到10分钟之前是否安排了任何提醒。例如,如果cron在5:35:30运行,它将检查5:25:00和5:35:00之间的任何提醒。如果找到,发送它们,如果没有,则终止。

我对第二种方法的唯一问题是,如果这不会导致一些提醒不被发送,我不肯定。

例如,如果服务器负载较高,而计划在5:35:00安装的Cron则在5:37:00运行。然后,可能会错过任何计划在5:35:00发送的电子邮件。

我应该选择哪种方法?

2 个答案:

答案 0 :(得分:1)

在Windows和Unix机器上,有at,用于在指定时间安排一次性作业。除非您发送的电子邮件太多以至于每分钟检查/发送更有意义,否则只需让“保存我的提醒”代码通过at作业安排发送就可能更容易了。 / p>

答案 1 :(得分:1)

它们是相同的选项,仅在时期上有所不同。

您可能会将此视为间隔轮询或队列扫描,但“非实时”,因此您必须设计滞后。

通常,每次扫描都应该假设它可能已被延迟,并且系统应该有一些定义的策略来处理“太旧”的排队通知。 (如果系统在扫描新排队的通知之前一小时关闭电源怎么办?)

为了提高稳健性,请确保队列处理是原子的或同步的 - 无论是来自并发扫描还是后续扫描,都不需要对项进行双重处理。