目录
一、主从不一致产生原因
二、Redisson 解决主从一致性的原理
一、主从不一致产生原因
1. Redis 主从集群:主从读写分离,主节点将数据同步给从节点
- 主节点:增删改
- 从节点:读
2. 主从同步存在延迟,若主节点宕机且从节点尚未同步主节点中的锁数据,则锁失效,出现主从不一致的情况
3. Redis 中的哨兵机制
- 哨兵发现主节点宕机后,会先断开与主节点连接的客户端,然后在从节点中选一个作为新的主节点,但锁还是失效,出现并发安全问题(其他线程来获取锁也能获取成功)
二、Redisson(multiLock)解决主从一致性的原理
1. 不要主从关系,每台 Redis 都是独立的,都可以读写
2. 获取锁:在所有的 Redis 服务器上都要获取锁
3. 主从节点模式:模拟主节点失效
- 主节点宕机,锁数据尚未同步,从节点变为新的主节点
- 其他线程来获取锁,在新的主节点上能获取成功
- 但是在其他主节点上也有锁的标识,线程无法在所有主节点上都获取到锁,则获取锁失败
- 是否等待重试获取锁
- 如果 waitTime == -1,表示不等待,直接返回 false,获取锁失败
- 如果 waitTime != -1,表示要等待,先释放之前已经获取到的锁,从头再来,等待一段时间后,从头开始获取所有节点上的锁
4. 优点
- 高可用:主从节点的模式可以保留
- 避免主从同步不一致时锁失效的问题
5. 缺点
- 运维成本高,实现复杂
- 至少需要三台 Redis 服务器