当前位置:   article > 正文

【laravel+redis】分布式锁的实现_laravel 原子锁原理

laravel 原子锁原理

laravel官方支持“原子锁”,并且说“要使用这个功能,应用必须使用 memcacheddynamodbredisdatabase 或 array 缓存驱动作为应用默认的缓存驱动,此外,所有服务器必须和同一台中央缓存服务器进行通信”。前半句不多解释,后半句也强调了laravel的原子锁不负责在集群架构中保障故障转移期间的数据安全性。

我贴一下laravel的源码看一下它是怎样用redis实现的分布式锁,我本机是laravel8,redis6,laravel6、7也都可以用,代码没什么变化。

1.laravel中实现一个锁的demo

  1. use Illuminate\Contracts\Cache\LockTimeoutException;//抛出异常类
  2. $lock = Cache::lock('foo', 10);//持有锁10s
  3. try {
  4. $lock->block(5);
  5. // 最长等待 5s 后获取锁...
  6. } catch (LockTimeoutException $e) {
  7. // 无法获取锁...
  8. } finally {
  9. optional($lock)->release();
  10. }
  11. Cache::lock('foo', 10)->block(5, function () {
  12. // 最长等待 5s 后获取锁...
  13. });

发现它用了Cache门面的lock方法,去\vendor\laravel\framework\src\Illuminate\Support\Facades\Cache.php看一下,

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

闽ICP备14008679号