redis分布式锁 ***** 基于 redis 和 swoole 我们实现了 redis 分布式锁,在现在docker,微服务成为主流下分布式锁也很重要; | 方法 |含义 | | --- | --- | |lock($key, $timeout = 500) | 加锁 | |unlock($key) | 解锁 | |tryLock($key) | 尝试加锁 | |lockRead($key, $timeout = 500) | 加只读锁 | |tryLockRead($key) | 尝试只读锁 | 注意加锁和解锁是成对出现的哦,别忘了解锁 >[info]为了防止特殊情况产生,产生死锁,默认我们任何锁都设置了过期时间10s,也就是任何锁定时间都不可以超过10s #### lock ***** 加锁操作。如果有其他进程持有锁(固有锁,只读锁都算),那这里将进入阻塞,直到持有锁的访问 unlock。timeout 超时时间,一定时间后如果还是没有获取到锁将返回 false 加锁成功返回true 加锁失败返回true #### unlock ***** 解锁成功返回true ### tryLock ***** 加锁操作。与lock方法不同的是,tryLock()不会阻塞,它会立即返回。 加锁成功返回true,此时可以修改共享变量。 失败返回false,表示有其他人持有锁。 ### lockRead ***** 只读加锁。 在持有读锁的过程中,其他进程依然可以获得读锁,可以继续发生读操作 但不能lock或tryLock,(会等待释放)这两个方法是获取独占锁,在独占锁加锁时,其他进程无法再进行任何加锁操作,包括读锁 当另外一个进程获得了独占锁(调用lock/tryLock)时,lockRead会发生阻塞,直到持有独占锁的释放锁