关于redisson的一些问题,为什么要用watchDog

redisson获取不到锁怎么处理

1.阻塞等待锁释放:redisson有waitTimeout参数控制锁等待时间,当某线程获取不到锁时,会进入阻塞状态等待锁释放或超过设置的时间

2.tryLock会根据参数直接返回或者抛出异常。

 tryLock一般有两种:

一种是不带参数的,这种不会阻塞,锁可用就返回true,锁不可用就返回false。

一种是带有时间参数的

boolean tryLock(long time, TimeUnit unit) throws InterruptedException;

在等待时间内,锁会一直自旋尝试获取锁,如果获取成功,那就直接返回true;如果等待时间内都没有获取锁,那就返回false。

抛出异常的情况是当前线程被中断

 

redisson关于业务未处理完,锁又被其他用户获取了怎么解决

开启watchDog,数据只能手动干预吧,这个问题对我来说真的不好回答

 

redis机器发生了时间跳变,对锁的影响和出现的情况,如何应对

如果时间跳回去了那就会导致原本该过期的锁未过期,会导致其他资源需要锁的时候无法使用

如果时间跳过去了那就会导致锁过早的失效,很容易发生上面那个业务未处理完锁被其他用户获取了的问题

不论如何时间跳变很可能会导致数据不一致、数据被破坏的问题

解决方法同样是加watchDog,业务未完成的状态下自动续期还是很重要的

 

redis会出现锁误删的情况吗

会。锁唯一标识冲突的时候;锁续约时出现异常的情况下

解决办法依旧是使用watchDog

 

posted @ 2025-01-09 17:22  天启A  阅读(42)  评论(0)    收藏  举报