一淘模板给人人介绍对于于在laravel中怎样应用Redis散布式锁的(原子锁lockblockrelease),希望对于需要的朋侪有所帮助!
建立锁
use IlluminateSupportFacadesCache; $lock = Cache::lock('foo', 10);if ($lock->get()) {// 解决营业逻辑sleep(3);$lock->release();}
获取有限期锁并主动开释
get方法能够接受一个闭包。在闭包实行以后,Laravel 将会主动开释锁。
Cache::lock('foo')->get(function () {// 获取有限期锁并主动开释...});
在指定时日内获取锁
use IlluminateContractsCacheLockTimeoutException; $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();
网友评论