主题
面试速答(先看这里)
**一句话结论:**因为watch dog的续期,是没有次数和时长的限制的,也就是说,如果没有主动解锁,那么他就会一直续期下去。
60秒标准回答:
上一篇文章中介绍了关于看门狗的机制,他会在用户没有指定锁的超时时间的时候,给锁做续期,他会有一个后台线程,定时的给锁续期
因为watch dog的续期,是没有次数和时长的限制的,也就是说,如果没有主动解锁,那么他就会一直续期下去
那么,就会有人提出这样的问题
**答题顺序:**结论 → 原理/机制 → 关键流程 → 场景与取舍 → 易错点
回答主线:
- **一直续期,别人不是拿不到锁了吗?:**上面这两个问题你可能不知道答案,那下面这几个你一定知道答案:
- **一旦客户端挂了但是锁还没释放怎么办?:**如果,应用集群中的一台机器,拿到了分布式锁,但是在执行的过程中,他挂了,还没来得及把锁释放,那么会有问题么?
**记忆锚点:**Redisson → 旦客户端挂了但是锁 → 别人不是拿不到锁 → 防止并发 → watchdog一直续期 → 绍了关于看门狗的机制
关键取舍:
- 因为watch dog的续期,是没有次数和时长的限制的,也就是说,如果没有主动解锁,那么他就会一直续期下去。
易错提醒:
- 3、如果解锁失败了,怎么办?
- 就不要用他的续期机制就好了。
加分表达:
- 那么,如果一个任务没执行完,我就一直给他续期,让他不断地延长锁时长,防止并发,有毛病吗?
- 如果你就是不想一直续期,那你就自己指定一个超时时间就行了。
追问准备:
- 那么,就会有人提出这样的问题: 1、一直续期,别人不是拿不到锁了吗?
- 2、一旦客户端挂了但是锁还没释放怎么办?
- 3、如果解锁失败了,怎么办?
- 一直续期,别人不是拿不到锁了吗?
典型回答
打开文档:✅Redisson的watch dog机制是怎么样的?
上一篇文章中介绍了关于看门狗的机制,他会在用户没有指定锁的超时时间的时候,给锁做续期,他会有一个后台线程,定时的给锁续期。
因为watch dog的续期,是没有次数和时长的限制的,也就是说,如果没有主动解锁,那么他就会一直续期下去。
那么,就会有人提出这样的问题:
1、一直续期,别人不是拿不到锁了吗?
2、一旦客户端挂了但是锁还没释放怎么办?
3、如果解锁失败了,怎么办?
一直续期,别人不是拿不到锁了吗?
上面这两个问题你可能不知道答案,那下面这几个你一定知道答案:
分布式锁的目的是什么?防止并发。
锁续期的条件是什么?还没解锁。
什么情况下会没解锁?任务没执行完。
那么,如果一个任务没执行完,我就一直给他续期,让他不断地延长锁时长,防止并发,有毛病吗?没有啊!
如果你就是不想一直续期,那你就自己指定一个超时时间就行了。就不要用他的续期机制就好了。
一旦客户端挂了但是锁还没释放怎么办?
如果,应用集群中的一台机器,拿到了分布式锁,但是在执行的过程中,他挂了,还没来得及把锁释放,那么会有问题么?
因为我们知道,锁的续期是Redisson实现的,而Redisson的后台任务是基于JVM运行的,也就是说,如果这台机器挂了,那么Redisson的后台任务也就没办法继续执行了。
那么他也就不会会再继续续期了,那么到了期限之后,锁就会自动解除了。这样就可以避免因为一个实例宕机导致分布式锁的不可用。