https://cloud.tencent.com/developer/article/2343229

以下是一个基本的 Redis 分布式锁的使用流程:

  1. 客户端 A 发送一个 SETNX lock.key 命令,如果返回 1,那么客户端 A 获得锁。
  2. 客户端 A 执行完毕后,通过 DEL lock.key 命令释放锁。

然而,这种最基本的锁存在一个问题,那就是如果客户端 A 在执行完毕后,因为某些原因(比如崩溃或网络问题)无法发送 DEL 命令来释放锁,那么其他客户端将永远无法获得锁。为了解决这个问题,我们需要引入锁的超时机制。

https://developer.qcloudimg.com/http-save/yehe-7144964/add37a158a9ec5f8f837807acdf09dcf.png

image-20230916130718524

下是一个带有超时机制的 Redis 分布式锁的使用流程:

  1. 客户端 A 发送一个 SETNX lock.key 命令,如果返回 1,那么客户端 A 获得锁。
  2. 客户端 A 通过 EXPIRE lock.key timeout 命令设置锁的超时时间。
  3. 客户端 A 执行完毕后,通过 DEL lock.key 命令释放锁。

这样,即使客户端 A 在执行完毕后无法释放锁,其他客户端也可以在锁超时后获得锁。