当前位置:   article > 正文

详解Laravel中如何使用Redis分布式锁+代码实例_laravel cache::lock

laravel cache::lock

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

创建锁

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

获取无限期锁并自动释放

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

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

在指定时间内获取锁

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

或者

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

无视拥有者强制释放锁

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. Cache::restoreLock('foo', $this->owner)->release();

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/449291
推荐阅读
相关标签
  

闽ICP备14008679号