https://juejin.cn/post/7258863572553531447

下面是红锁的基本工作流程:

  1. 获取锁:当一个客户端要获取红锁时,它会尝试在多个 Redis 节点上分别执行 SETNX(SET if Not exists)命令,只有当所有节点都成功设置了锁时,客户端才认为获取到了锁。就是对集群的每个节点加锁,如果大多数(N/2 + 1)加锁成功了,则认为获取锁成功。
  2. 锁的有效期:在获取到锁之后,客户端会给锁设置一个有效期,防止死锁情况的发生。客户端可以为锁设置一个过期时间,超过该时间后锁自动释放。
  3. 保持锁:在锁的有效期内,客户端可以周期性地发送续约请求,以确保锁的持有权不会被其他客户端篡夺。续约请求通常是通过对锁对应的键执行 PEXPIRE(设置过期时间)命令来实现。
  4. 释放锁:当客户端不再需要锁时,可以主动释放锁。客户端会向多个 Redis 节点发送释放锁的请求,只有当大多数节点成功删除锁时,客户端才认为锁已被释放。

红锁算法的目标是通过在多个 Redis 节点上执行操作来增加锁的可靠性和安全性。但需要注意的是,红锁算法并不能解决所有的分布式锁问题,如网络分区、时钟偏移等问题仍然存在。

在实际应用中,建议综合考虑红锁算法的优缺点,并根据具体的业务场景和需求选择合适的分布式锁机制。