Laravel Redis分布式鎖的使用


 Laravel Redis分布式鎖的使用 

創建鎖

use Illuminate\Support\Facades\Cache; $lock = Cache::lock('foo', 10); if ($lock->get()) { // 處理業務邏輯
    sleep(3); $lock->release(); }

獲取無限期鎖並自動釋放

get 方法可以接收一個閉包。在閉包執行之后,Laravel 將會自動釋放鎖。

Cache::lock('foo')->get(function () { // 獲取無限期鎖並自動釋放...
});

在指定時間內獲取鎖

use Illuminate\Contracts\Cache\LockTimeoutException; $lock = Cache::lock('foo', 10); try { $lock->block(5); echo "5秒時間內成功獲取鎖..."; } catch (LockTimeoutException $e) { echo "5秒時間內獲取鎖失敗..."; } finally { optional($lock)->release(); }

另一種寫法:

Cache::lock('foo', 10)->block(5, function () { echo "5秒時間內成功獲取鎖..."; });

無視擁有者強制釋放鎖

Cache::lock('foo')->forceRelease();

跨進程管理鎖

// 控制器中...
$podcast = Podcast::find($id); $lock = Cache::lock('foo', 120); if ($result = $lock->get()) { ProcessPodcast::dispatch($podcast, $lock->owner()); }
// 隊列任務中... // 使用鎖名稱和擁有者重新獲取鎖實例后再釋放
Cache::restoreLock('foo', $this->owner)->release();

原文地址:https://www.cnblogs.com/danhuang/p/13266960.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM