Laravel阻止schedule:run将密钥添加到缓存

时间:2018-10-18 13:49:22

标签: php laravel scheduled-tasks

只要我的应用程序运行php artisan schedule:run并成功地将一些作业调度到我的任何队列中,它就会以以下格式为其自身创建一个缓存条目:

laravel:framework/schedule-{SCHEDULE_HASH},其中SCHEDULE_HASH是随机的32个字符串,我想知道此缓存键是否保存了一些有意义的数据,但仅将b:1;作为其值。

此缓存值的目的是什么?据我所知,对计划的调用一旦完成,我们就不会真正在意什么,因为我的流程运行器将在60秒内重新运行,以查看是否需要计划任何新作业。

这当前正在用数百个密钥向我的Redis缓存发送垃圾邮件,如果可能的话,我想解决它。

我唯一能想到的是,当schedule:run运行时, Running scheduled command: '/usr/local/bin/php' artisan job:name > '/dev/null' 2?&1也许后半部分以某种方式使用Redis作为其存储目标,然后在其中管道传递新的缓存值1,将不胜感激。

更新:我想知道我正在使用onOneServer函数时看到的实际上是否是缓存互斥体https://laravel.com/api/5.5/Illuminate/Console/Scheduling/Mutex.html。唯一的是,即使我的工作完成后,互斥体也不会释放。

计划任务:

$schedule->command('shop:calculate_remaining_work', [$shop->id])
    ->cron('*/5 * * * *') // per 5 minutes
    ->onOneServer()
    ->withoutOverlapping();

我希望该命令完成运行后即可释放互斥锁,但事实并非如此,互斥锁将在缓存中保留1440分钟。

1 个答案:

答案 0 :(得分:4)

https://laravel.com/docs/5.7/scheduling

在调用withoutOverlapping()时,您可以在几分钟内传递一个缓存过期值。

$schedule->command('emails:send')->withoutOverlapping(10);