回答
RedLock
是 Redis 作者提出的一个多节点分布式锁算法,它主要是解决单节点 Redis 分布式锁可能存在的单点故障问题。其核心思想是:不在单个 Redis 实例上进行加锁,而是在多个互相独立的 Redis 节点加锁,只有在大多数节点上解锁成功,锁才算获取成功。
扩展
单节点有什么问题
Redisson 支持多种分布式锁,如可重入锁、联锁、读写锁,但是这些锁都是基于单 Redis 节点锁,单节点的锁有什么问题呢?
- 单点故障:如果 Redis 节点因为故障等原因导致 Redis 实例挂掉,那么所有这个 Redis 实例的节点都将无法获取到锁,会严重阻碍业务。
- 主从同步问题:当我们使用集群部署 Redis,如果一个客户端在 Master 节点上获取到了锁,然后没有来得及将数据同步到 Slave 节点上,它就挂了。就算此时选举出来了一个新的 Master 节点,它里面也没有对应的锁信息,这个时候其他客户端就会获取锁成功,会导致并发问题。
Redis 官网也提到了这些问题: