赞
踩
laravel官方支持“原子锁”,并且说“要使用这个功能,应用必须使用 memcached
、dynamodb
、redis
、database
或 array
缓存驱动作为应用默认的缓存驱动,此外,所有服务器必须和同一台中央缓存服务器进行通信”。前半句不多解释,后半句也强调了laravel的原子锁不负责在集群架构中保障故障转移期间的数据安全性。
我贴一下laravel的源码看一下它是怎样用redis实现的分布式锁,我本机是laravel8,redis6,laravel6、7也都可以用,代码没什么变化。
1.laravel中实现一个锁的demo
- use Illuminate\Contracts\Cache\LockTimeoutException;//抛出异常类
-
- $lock = Cache::lock('foo', 10);//持有锁10s
-
- try {
- $lock->block(5);
-
- // 最长等待 5s 后获取锁...
- } catch (LockTimeoutException $e) {
- // 无法获取锁...
- } finally {
- optional($lock)->release();
- }
-
- Cache::lock('foo', 10)->block(5, function () {
- // 最长等待 5s 后获取锁...
- });
发现它用了Cache门面的lock方法,去\vendor\laravel\framework\src\Illuminate\Support\Facades\Cache.php看一下,
- /**
- * @
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。