W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
原子鎖允許對(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秒后獲取的鎖...
});
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: