✅watchdog一直续期,那客户端挂了怎么办?

典型回答

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

原文: https://www.yuque.com/hollis666/xkm7k3/ggc38etsob451zop