Redisson看门狗和加锁

首先抛出一个问题 redis 的分布式锁什么时候可能会有问题?

  • 简单的来说说
  • 第一个问题是 redis锁的时候, 线程A进入加锁成功,设置过期时间为5s,开始执行业务内的方法,但是业务在5s内没有执行完,锁被redis失效了,则线程B加锁成功,B开始执行了业务,也就是说这个锁已经失效了,此方法变成了多线程共同执行的方法
  • 第二个问题是 还是上面复述,这时候A执行完了,去解锁,发现把B线程的锁给解除了
    第二种情况
  • 说说解决办法,第一种情况,可以把时间加长,但不是根本解决办法,因为你不知道业务具体要执行多久,那么另一种解决办法就是通过使用 redission 的看门狗, 第二种情况,这个我们可以使用 设置随机value值,解锁时候对比即可
  • 那么说道看门狗,看门狗是如何实现的呢,通过阅读 redission的源码可知, 看门狗的实现方式是使用的netty的 HashedWheelTimer 时间轮, 时间轮是什么呢? 顾名思义,就是个轮子,按圈来进行放入数据,按圈来进行调用, 看门狗利用了这点,在循环了一段时间后 进行查看key是否存在,如果还存在 ,则延长时间, 时间是怎么延长的呢, 是时间/3 , 默认每10s去检查一次是否需要续期,什么时候不会使用看门狗呢?
  • 答案是,调用 lock 方法的时候传进一个指定时间,这样如果指定时间之内没有调用 unLock 方法,该锁还是会被释放的。就像下面这样:

rLock.lock(5,TimeUnit.SECONDS);
这样就不会使用了看门狗,看源码得知,该方法和看门狗方法 走的是两个分支,所以看门狗不会生效

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值