前言
在開發過程中併發處理需要加鎖,但過程中邏輯判斷很多,不滿足條件就要解鎖,如果每個地方都加一個解鎖,就會顯得很臃腫,這時我們可以這樣做!
$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 協議》,轉載必須註明作者和本文連結