Php 用Laravel调度一次性任务
我目前正在努力为我的应用程序中的特定功能找出最佳逻辑 考虑这一点:Php 用Laravel调度一次性任务,php,laravel,cron,queue,scheduled-tasks,Php,Laravel,Cron,Queue,Scheduled Tasks,我目前正在努力为我的应用程序中的特定功能找出最佳逻辑 考虑这一点: 在数据库中创建记录 5小时后,该记录被删除。除非它在创建后已更新,否则在这种情况下,删除将在时间更新\u后5小时发生 我非常熟悉Laravel队列和cron作业等,并简要介绍了Laravel Task Scheduler,但实际上我正在努力解决的是该如何工作的逻辑 以下是我目前的算法(我知道这不是最好的解决方案): 记录是在数据库中创建的 在创建该记录4小时55分钟后,将为此特定记录安排一项任务(其目的是向用户发送通知,警告他们
更新\u后5小时发生
更新时间重置为4小时55分钟。如果没有更新,它将在5分钟后再次运行相同的任务,在最后删除记录之前,它将再次测试时间戳
请注意,我不需要为我编写代码,我只是在寻找逻辑方面的帮助我可能过于简化了,但下面的过程会更简单吗:
- 此任务正在查找
updated_值大于或等于当前时间的记录(我只会使用
),并从中删除它们Carbon
这样做会更好吗?您应该能够通过排队作业来完成这项工作,Laravel允许您指定处理程序再次处理它之前的时间。请参阅下面链接上的“手动释放作业” 然后,您可以创建某种形式的排队作业,并检查何时更新的_加上多少时间,然后将其与当前时间进行比较,并将其释放到队列中,时间为秒数,这意味着应根据更新的_是否更改运行一次或两次,从而最大限度地减少检查数据库的需要
$this->release($timeuntilfivehoursferupdatedat)代码>实际上我自己也想到了这一点,但明显的问题是,每分钟对数据库执行一次查询并不是最好的主意。此外,为了保持简单,我没有提到的一点是,检查项目是否已更新并不像执行SQL查询那样简单。数据库记录的用途如下:(感谢您的回复,但是,正如我在问题中提到的,我非常熟悉Laravel队列的工作原理等。我看不到有什么方法可以将队列项目延迟5个小时,我也看不到发布
有什么帮助……嘿,根据文档,“release方法接受一个参数:您希望等待作业再次可用的秒数”,因此,如果您在理论上超过5小时,那么它应该在此时将作业提供给处理程序,然后检查更新的at是否已更改,并相应地进行操作。