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();


免責聲明!

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



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