只要我的应用程序运行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分钟。
答案 0 :(得分:4)
https://laravel.com/docs/5.7/scheduling
在调用withoutOverlapping()
时,您可以在几分钟内传递一个缓存过期值。
$schedule->command('emails:send')->withoutOverlapping(10);