Laravel 8 管理鎖

2021-07-17 17:40 更新

原子鎖允許對(duì)分布式鎖進(jìn)行操作而不必?fù)?dān)心競(jìng)爭(zhēng)條件。例如,Laravel Forge 使用原子鎖來(lái)確保在一臺(tái)服務(wù)器上每次只有一個(gè)遠(yuǎn)程任務(wù)在執(zhí)行。你可以使用 Cache::lock 方法來(lái)創(chuàng)建和管理鎖:

use Illuminate\Support\Facades\Cache;

$lock = Cache::lock('foo', 10);

if ($lock->get()) {
    // 獲取鎖定10秒...

    $lock->release();
}

get 方法也可以接收一個(gè)閉包。在閉包執(zhí)行之后,Laravel 將會(huì)自動(dòng)釋放鎖:

Cache::lock('foo')->get(function () {
    // 獲取無(wú)限期鎖并自動(dòng)釋放...
});

如果你在請(qǐng)求時(shí)鎖無(wú)法使用,你可以控制 Laravel 等待指定的秒數(shù)。如果在指定的時(shí)間限制內(nèi)無(wú)法獲取鎖,則會(huì)拋出 Illuminate\Contracts\Cache\LockTimeoutException

use Illuminate\Contracts\Cache\LockTimeoutException;

$lock = Cache::lock('foo', 10);

try {
    $lock->block(5);

    // 等待最多5秒后獲取的鎖...
} catch (LockTimeoutException $e) {
    // 無(wú)法獲取鎖...
} finally {
    optional($lock)->release();
}

Cache::lock('foo', 10)->block(5, function () {
    // 等待最多5秒后獲取的鎖...
});


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)