redisson 的 watchdog 有一个自动延期的机制,是说,比如业务估计耗时 30s ,我设置了 30s ,极端情况执行如果超过 30s ,锁释放了,会出错,所以在到达 30s 的时候 redisson 如果发现任务没有执行完会自动续期直到任务结束释放锁,大概是这么个意思。
实际开发中:
// 具有 Watch Dog 自动延期机制 默认续 30s 每隔 30/3=10 秒续到 30s
lock.lock();
// 尝试拿锁 10s 后停止重试,返回 false 具有 Watch Dog 自动延期机制 默认续 30s
boolean res1 = lock.tryLock(10, TimeUnit.SECONDS);
- 第 2 种很好理解,最长持有锁就 10s ,超过就释放。
- 第 1 种就会走 watchdog 自动延期这个策略。但是这里是不是就矛盾了,如果业务上有 bug ,进到死循环或宕机了,那锁还在不断自动延期,锁不释放那不就造成死锁了?