下面由laravel教程欄目給大家介紹關(guān)于在laravel中如何使用redis分布式鎖的(原子鎖 lock block release),希望對需要的朋友有所幫助!
創(chuàng)建鎖
use?IlluminateSupportFacadesCache; $lock?=?Cache::lock('foo',?10); if?($lock->get())?{ ????//?處理業(yè)務(wù)邏輯 ????sleep(3); ????$lock->release(); }
獲取無限期鎖并自動釋放
get 方法可以接收一個閉包。在閉包執(zhí)行之后,laravel 將會自動釋放鎖。【相關(guān)推薦:laravel教程】
Cache::lock('foo')->get(function?()?{ ????//?獲取無限期鎖并自動釋放... });
在指定時間內(nèi)獲取鎖
use?IlluminateContractsCacheLockTimeoutException; $lock?=?Cache::lock('foo',?10); try?{ ????$lock->block(5); ????echo?"5秒時間內(nèi)成功獲取鎖..."; }?catch?(LockTimeoutException?$e)?{ ????echo?"5秒時間內(nèi)獲取鎖失敗..."; }?finally?{ ????optional($lock)->release(); }
或者
Cache::lock('foo',?10)->block(5,?function?()?{ ????echo?"5秒時間內(nèi)成功獲取鎖..."; });
無視擁有者強(qiáng)制釋放鎖
Cache::lock('foo')->forceRelease();
跨進(jìn)程管理鎖
//?控制器中... $podcast?=?Podcast::find($id); $lock?=?Cache::lock('foo',?120); if?($result?=?$lock->get())?{ ????ProcessPodcast::dispatch($podcast,?$lock->owner()); } //?隊列任務(wù)中... //?使用鎖名稱和擁有者重新獲取鎖實例后再釋放 Cache::restoreLock('foo',?$this->owner)->release();
? 版權(quán)聲明
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載。
THE END