假设我有一个这样的数据库。
| task | time |
|---------------------------|---------------------------|
| Remind me to water plants | 2018-02-18T19:32:10.486Z |
| English Test | 2018-10-8T09:30:00.000Z |
| Math Test | 2018-10-8T10:30:00.000Z |
我想在用户请求时(或者可能一小时前)向用户发送提醒通知,并在触发提醒通知的特定时间执行一些其他代码块。
我正在考虑编写一个类似这样的 cron 作业
* * * * * php /laravel-project/artisan schedule:run >> /dev/null 2>&1
正如 Laravel 文档中提到的(https://laravel.com/docs/5.6/scheduling https://laravel.com/docs/5.6/scheduling).
在该脚本中,我将循环当前时间提醒和下一小时内的提醒并执行操作。
这是一个好的做法吗?不会增加PHP和数据库之间的流量吗?如果我在同一小时内有很多提醒,那么循环并为每个提醒执行代码块会是一个好主意吗?
请提出想法
使用任务调度程序 https://laravel.com/docs/5.6/scheduling是解决这个问题的正确方法。如果您有大量提醒需要处理,那么将它们设置为执行排队的作业 https://laravel.com/docs/5.6/queues是推荐的方法。这样,服务器上的负载就会最小化,并且不会成为用户流量的系统瓶颈。
您可能想要创建一个控制台命令 https://laravel.com/docs/5.6/artisan处理处理逻辑并创建作业。Chunking https://laravel.com/docs/5.6/queries#chunking-results这些作业也会很有帮助,因为这会错开给定批次中处理的作业数量。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)