詳解Laravel中如何使用Redis分布式鎖(附代碼實例)

下面由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)聲明
THE END
喜歡就支持一下吧
點贊9 分享