碼迷,mamicode.com
首頁 > 移動開發 > 詳細

laravel withoutOverlapping導致執行腳本延遲或者失效問題

時間:2021-07-15 18:59:48      閱讀:0      評論:0      收藏:0      [點我收藏+]

標簽:ppi   ping   原因   需要   sch   exists   overlap   lazy   ret   

2021年7月15日11:24:00

 

當執行某個需要經常跑的 everyMinute的之后防止,一次腳本未執行完就又重新跑,導致出現超出預期的錯誤,或者數據錯誤,就會使用 withoutOverlapping來防止重復執行

$schedule->command(‘NoPersonPrize‘)->everyMinute()->withoutOverlapping();

但是當你有多個withoutOverlapping和多個沒有使用withoutOverlapping的放在Kernel的時候,會出現一些意外,比如有些腳本沒有跑,或者延遲跑,是什么原因造成的呢?

 

 public function withoutOverlapping($expiresAt = 1440)
    {
        $this->withoutOverlapping = true;

        $this->expiresAt = $expiresAt;

        return $this->then(function () {
            $this->mutex->forget($this);
        })->skip(function () {
            return $this->mutex->exists($this);
        });
    }
withoutOverlapping的底層是利用緩存指定一個互斥的鎖,如果你的laravel的緩存使用redis的時候,就會使用redis作為互斥鎖的緩存key,默認緩存是file

$schedule->command(‘a‘)->everyMinute()->withoutOverlapping();

$schedule->command(‘b‘)->everyMinute();

$schedule->command(‘c‘)->everyMinute();

$schedule->command(‘d‘)->everyMinute()->withoutOverlapping();

 

這里多數人認為a,b,c,d會在每分鐘開始會同事執行,其實不是,是先執行a,|(b,c)|d,是在a執行完在執行d,(b,c)是和a基本同時執行,

問題在于在互斥鎖的問題,是執行一個完成之后在執行一個,不是每個腳本獨立執行的

舉例:

laravel_cache:framework/schedule-0e06f675a49cb9a0010858533b27d6a525caea88

內容:b:1;

技術圖片

 

 

就會導致延遲執行某些腳本,甚至不執行
使用建議如下:
1,沒有使用withoutOverlapping,在使用的上面,隔離開例如
$schedule->command(‘b‘)->everyMinute();
$schedule->command(‘c‘)->everyMinute();
#-------------------------------------------------------------------------
$schedule->command(‘a‘)->everyMinute()->withoutOverlapping();
$schedule->command(‘d‘)->everyMinute()->withoutOverlapping();

2,如果非必要每分鐘執行的腳本,不要使用everyMinute+withoutOverlapping這種組合,避免重復執行
建立通過代碼邏輯規避這個問題

3,如果多個有withoutOverlapping或者沒有withoutOverlapping可以通過->dailyAt(‘18:33‘);
這中類似的特殊時間避開全部整點執行問題

4,減少或者不用withoutOverlapping


laravel withoutOverlapping導致執行腳本延遲或者失效問題

標簽:ppi   ping   原因   需要   sch   exists   overlap   lazy   ret   

原文地址:https://www.cnblogs.com/zx-admin/p/15014944.html

(0)
(0)
   
舉報
評論 一句話評論(0
登錄后才能評論!
? 2014 mamicode.com 版權所有  聯系我們:gaon5@hotmail.com
迷上了代碼!
4399在线看MV_久久99精品久久久久久久久久_成人又黄又爽又刺激视频_能收黄台的app不收费