看门狗
约 362 字大约 1 分钟
2025-04-01
若一个线程要通过获取分布式锁来执行某一操作,而为了防止锁未释放,必须对该分布式锁设置过期时间 假如操作处理时间过长,超过了设置的锁过期时间,这会导致其他线程获取到该锁出现并发问题。为了解决这个问题可以使用看门狗机制
原理
加入线程 A 需要操作数据库,在其操作前必须获得锁 X,当线程A成果获取锁 X(假设过期时间30s)后启动一个子线程 A1,A1 每隔 10 秒检查当前锁的值是否为其 A,若是则代表 A 的操作还未完成,重新设置锁的过期时间,直到 A 完成操作后自行将锁的字段删除,这个 A1 的操作就是看门狗
意外情况
示例长忙导致续约失败
假如系统出现突发 GC、CPU 饱和或是网络阻塞,导致看门狗没能够在过期前完成续期,而业务线程任何依旧持有锁仍在执行,这时候其他线程就有可能获取该锁,这时就会出现并发安全问题
方案
在每一次进行关键操作前(如数据库操作)查询一次锁的归属,尽可能避免幻觉锁带来的影响