当持有分布式锁的线程尚未执行完业务逻辑时,锁却已过期,如何应对这种提前失效的情况?
考察说明
考察对分布式锁过期场景的理解及处理策略。
回答思路
- 【回答框架 1】分布式锁通过设置过期时间防止死锁,但若业务执行时间超过过期时间,锁会被自动释放,导致其他线程获取锁并可能重复执行。
- 【回答框架 2】常见解决方案是使用看门狗机制定期续期,例如Redisson中通过后台线程在锁过期前自动续期,但需注意续期过程中的网络分区等风险。
- 【回答框架 3】另一种方案是增加锁的超时时间,但可能增加死锁风险,需根据业务耗时合理设置。
- 【回答框架 4】最终,即使锁过期,业务应尽量减少副作用,例如通过唯一标识或状态检查保证幂等。
- 【关键点 1】锁过期导致互斥失效,其他线程可获取锁。
- 【关键点 2】看门狗机制可自动续期,但可能导致锁被无限持有。
- 【关键点 3】增加超时时间需权衡业务耗时与死锁风险。
- 【关键点 4】处理策略后,仍需通过幂等设计兜底。
- 【易错点 1】认为锁过期后业务必然出错,忽略幂等兜底。
- 【易错点 2】过度依赖看门狗,忽略网络分区导致续期失败。
- 【易错点 3】把锁过期与业务超时混为一谈,未区分场景。