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

标签 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 的电子邮件都可能会被错过。

我应该选择哪种方法?

最佳答案

它们是相同的选项,只是周期不同。

您可能会将其视为间隔轮询或队列扫描,但“非实时”,因此您必须针对延迟进行设计。

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

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

关于php - 每分钟通过 CRON 发送电子邮件 - 我的方法可以改进吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12443645/

相关文章:

php - 如何解决 Moodle 3.8.4 上的 ddl 执行错误?

php - 如何仅在退出另一个容器后才启动Docker容器

mysql - EF6 codefirst + MySql 迁移 : type nvarchar(max) not supported

mysql - MySQL GROUP BY 的问题

performance - 从 NetBeans 到 Glassfish 的部署非常慢

java - 高效的多SQL插入

oracle - 插入 varchar2 列从 xmltype 列 : extremely slow 中选择

php - Apache退出,代码为0 docker apache try

php - AJAX 查看表数据按钮单击

mysql - 如何获取 52 周格式的 Mysql 数据?