上一篇文章中介绍了关于看门狗的机制,他会在用户没有指定锁的超时时间的时候,给锁做续期,他会有一个后台线程,定时的给锁续期。
因为watch dog的续期,是没有次数和时长的限制的,也就是说,如果没有主动解锁,那么他就会一直续期下去。
那么,就会有人提出这样的问题:
1、一直续期,别人不是拿不到锁了吗?
2、一旦客户端挂了但是锁还没释放怎么办?
3、如果解锁失败了,怎么办?
上面这两个问题你可能不知道答案,那下面这几个你一定知道答案:
分布式锁的目的是什么?防止并发。
锁续期的条件是什么?还没解锁。
什么情况下会没解锁?任务没执行完。
那么,如果一个任务没执行完,我就一直给他续期,让他不断地延长锁时长,防止并发,有毛病吗?没有啊!
如果你就是不想一直续期,那你就自己指定一个超时时间就行了。就不要用他的续期机制就好了。
如果,应用集群中的一台机器,拿到了分布式锁,但是在执行的过程中,他挂了,还没来得及把锁释放,那么会有问题么?
因为我们知道,锁的续期是Redisson实现的,而Redisson的后台任务是基于JVM运行的,也就是说,如果这台机器挂了,那么Redisson的后台任务也就没办法继续执行了。
那么他也就不会会再继续续期了,那么到了期限之后,锁就会自动解除了。这样就可以避免因为一个实例宕机导致分布式锁的不可用。