laravel 實戰延遲解鎖

my38778570發表於2023-02-24

前言

在開發過程中併發處理需要加鎖,但過程中邏輯判斷很多,不滿足條件就要解鎖,如果每個地方都加一個解鎖,就會顯得很臃腫,這時我們可以這樣做!

$cache = Cache::get('key');
if (!empty($cache)) {
    exit('請不要頻繁操作');
}
Cache::put('key', time(), 2);
//延遲解鎖( ${__LINE__} 不要刪除,否則沒作用)
${__LINE__} = defer(function () use ($admin){
    Cache::delete('key');
});

//程式碼邏輯處理
//延遲操作
if (!function_exists('defer')) {
    function defer(callable $cb)
    {
        return new class($cb) {
            public function __construct($fn)
            {
                $this->fn = $fn;
              }
            public function __destruct()
            {
                ($this->fn)();
              }
        };
      }
}

參考 部落格:php 實現golang defer延遲執行(先進後出)

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章