详解Laravel中如何使用Redis分布式锁(附代码实例)

 3420

下面给大家介绍关于在laravel中如何使用Redis分布式锁的(原子锁 lock block release),希望对需要的朋友有所帮助!


详解Laravel中如何使用Redis分布式锁(附代码实例)


创建锁

  1. use IlluminateSupportFacadesCache;
  2.  
  3. $lock = Cache::lock('foo', 10);
  4. if ($lock->get()) {
  5.     // 处理业务逻辑
  6.     sleep(3);
  7.     $lock->release();
  8. }


获取无限期锁并自动释放

get 方法可以接收一个闭包。在闭包执行之后,Laravel 将会自动释放锁。

  1. Cache::lock('foo')->get(function () {
  2.     // 获取无限期锁并自动释放...
  3. });


在指定时间内获取锁

  1. use IlluminateContractsCacheLockTimeoutException;
  2.  
  3. $lock = Cache::lock('foo', 10);
  4. try {
  5.     $lock->block(5);
  6.     echo "5秒时间内成功获取锁...";
  7. } catch (LockTimeoutException $e) {
  8.     echo "5秒时间内获取锁失败...";
  9. } finally {
  10.     optional($lock)->release();
  11. }

或者

  1. Cache::lock('foo', 10)->block(5, function () {
  2.     echo "5秒时间内成功获取锁...";
  3. });


无视拥有者强制释放锁

  1. Cache::lock('foo')->forceRelease();


跨进程管理锁

  1. // 控制器中...
  2. $podcast = Podcast::find($id);
  3. $lock = Cache::lock('foo', 120);
  4. if ($result = $lock->get()) {
  5.     ProcessPodcast::dispatch($podcast, $lock->owner());
  6. }
  7.  
  8. // 队列任务中...
  9. // 使用锁名称和拥有者重新获取锁实例后再释放
  10. Cache::restoreLock('foo', $this->owner)->release();


本文网址:https://www.zztuku.com/detail-13292.html
站长图库 - 详解Laravel中如何使用Redis分布式锁(附代码实例)
申明:本文转载于《learnku》,如有侵犯,请 联系我们 删除。

评论(0)条

您还没有登录,请 登录 后发表评论!

提示:请勿发布广告垃圾评论,否则封号处理!!

    编辑推荐