我在一个提醒类型的网站上工作,在那里你可以设置提醒发送给你自己,设置提醒的时间,当时间发生时,你会收到一封电子邮件。
然而,提醒并不重要,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的任何电子邮件都可能被错过。
我应该使用哪种方法?
发布于 2012-09-16 10:05:51
它们是相同的选项,只是周期不同。
您可能认为这是间隔轮询或队列扫描,但它是“非实时的”,因此您必须针对延迟进行设计。
通常,每个扫描都应该假设它可能已经被延迟,而且系统应该有一些定义的策略来处理“太旧”的排队通知。(如果系统关机一小时后才能清理新入队的通知,该怎么办?)
为了健壮性,请确保队列处理是原子的或同步的-无论是来自并发扫描还是后续扫描,都不会重复处理项目。
发布于 2012-09-16 10:05:44
在Windows和Unix机器上,有at,它用于在指定的时间安排一次性作业。除非你发送的电子邮件太多,所以每分钟检查/发送一次会更有意义,否则让“保存我的提醒”代码通过at作业调度发送可能会更容易一些。
https://stackoverflow.com/questions/12443645
复制相似问题