1. Redisson 分布式锁在锁超时与 GC 停顿下的安全性
请说明 Redisson 分布式锁在锁超时与 GC 停顿(STW)场景下的安全性问题,以及看门狗机制如何缓解?
- 锁超时导致锁提前释放
- GC 停顿对锁持有的影响
- 看门狗(WatchDog)续期
基于 Redis 的分布式锁存在"锁超时"与"GC 停顿"两个安全性隐患。当客户端持有锁但业务执行超过锁的 TTL 时,锁被 Redis 自动释放,其他客户端便可获得锁,原客户端仍在执行临界区,造成两个客户端同时进入临界区,破坏互斥。GC 停顿(STW)期间,客户端暂停无法续期,也会导致锁过期被释放。Redisson 通过看门狗(WatchDog)缓解:默认锁 watchdog 续期时间内,后台定时任务每 1/3 锁过期时间自动续期,只要客户端进程存活,锁就不会过期。但看门狗无法完全解决 GC 停顿问题——若停顿超过续期周期,锁仍可能过期。因此 Redisson 锁的安全性依赖"锁持有时间不超过 TTL 且续期及时",对强一致场景需配合 Fencing Token 或采用 etcd/ZK 锁。
看门狗把"业务执行时间"与"锁 TTL"解耦,通过自动续期避免"业务没做完锁先释放"。但 GC 停顿是看门狗也无法完全规避的物理极限,因此 Redisson 锁是"足够好"而非"绝对安全",对极端安全要求需用带 Fencing 机制或强一致协调器的锁。