Skip to content

面试速答(先看这里)

**一句话结论:**因为watch dog的续期,是没有次数和时长的限制的,也就是说,如果没有主动解锁,那么他就会一直续期下去。

60秒标准回答:

上一篇文章中介绍了关于看门狗的机制,他会在用户没有指定锁的超时时间的时候,给锁做续期,他会有一个后台线程,定时的给锁续期

因为watch dog的续期,是没有次数和时长的限制的,也就是说,如果没有主动解锁,那么他就会一直续期下去

那么,就会有人提出这样的问题

**答题顺序:**结论 → 原理/机制 → 关键流程 → 场景与取舍 → 易错点

回答主线:

  • **一直续期,别人不是拿不到锁了吗?:**上面这两个问题你可能不知道答案,那下面这几个你一定知道答案:
  • **一旦客户端挂了但是锁还没释放怎么办?:**如果,应用集群中的一台机器,拿到了分布式锁,但是在执行的过程中,他挂了,还没来得及把锁释放,那么会有问题么?

**记忆锚点:**Redisson → 旦客户端挂了但是锁 → 别人不是拿不到锁 → 防止并发 → watchdog一直续期 → 绍了关于看门狗的机制

关键取舍:

  • 因为watch dog的续期,是没有次数和时长的限制的,也就是说,如果没有主动解锁,那么他就会一直续期下去。

易错提醒:

  • 3、如果解锁失败了,怎么办?
  • 就不要用他的续期机制就好了。

加分表达:

  • 那么,如果一个任务没执行完,我就一直给他续期,让他不断地延长锁时长,防止并发,有毛病吗?
  • 如果你就是不想一直续期,那你就自己指定一个超时时间就行了。

追问准备:

  • 那么,就会有人提出这样的问题: 1、一直续期,别人不是拿不到锁了吗?
  • 2、一旦客户端挂了但是锁还没释放怎么办?
  • 3、如果解锁失败了,怎么办?
  • 一直续期,别人不是拿不到锁了吗?

典型回答 ​

📄 ✅Redisson的watch dog机制是怎么样的?

打开文档:✅Redisson的watch dog机制是怎么样的?

上一篇文章中介绍了关于看门狗的机制,他会在用户没有指定锁的超时时间的时候,给锁做续期,他会有一个后台线程,定时的给锁续期。

因为watch dog的续期,是没有次数和时长的限制的,也就是说,如果没有主动解锁,那么他就会一直续期下去。

那么,就会有人提出这样的问题:

1、一直续期,别人不是拿不到锁了吗?

2、一旦客户端挂了但是锁还没释放怎么办?

3、如果解锁失败了,怎么办?

一直续期,别人不是拿不到锁了吗? ​

上面这两个问题你可能不知道答案,那下面这几个你一定知道答案:

分布式锁的目的是什么?防止并发。

锁续期的条件是什么?还没解锁。

什么情况下会没解锁?任务没执行完。

那么,如果一个任务没执行完,我就一直给他续期,让他不断地延长锁时长,防止并发,有毛病吗?没有啊!

如果你就是不想一直续期,那你就自己指定一个超时时间就行了。就不要用他的续期机制就好了。

一旦客户端挂了但是锁还没释放怎么办? ​

如果,应用集群中的一台机器,拿到了分布式锁,但是在执行的过程中,他挂了,还没来得及把锁释放,那么会有问题么?

因为我们知道,锁的续期是Redisson实现的,而Redisson的后台任务是基于JVM运行的,也就是说,如果这台机器挂了,那么Redisson的后台任务也就没办法继续执行了。

那么他也就不会会再继续续期了,那么到了期限之后,锁就会自动解除了。这样就可以避免因为一个实例宕机导致分布式锁的不可用。

如果解锁失败了,怎么办? ​

📄 ✅watchdog解锁失败,会不会导致一起续期下去?

打开文档:✅watchdog解锁失败,会不会导致一起续期下去?