开发者

Redis Redisson tryLock函数参数使用分析

开发者 https://www.devze.com 2024-08-10 10:00 出处:网络 作者: 放羊的牧码
目录Redisson tryLock函数参数分析这里有三个参数等待时间超时施放时间总结Redisson pythontryLock函数参数分析
目录
  • Redisson tryLock函数参数分析
    • 这里有三个参数
    • 等待时间
    • 超时施放时间
  • 总结

    Redisson pythontryLock函数参数分析

    Redis Redisson tryLock函数参数使用分析

    这里有三个参数

    • waitTime:等待时间
    • leaseTime:超时施放时间
    • TimeUnit:时间单位

    等待时间

    如果 ABC… 多个线程去抢夺一把锁,A 成功了,如果设置的是 -1,那么 BCD... 就不等待,直接返回失败,也就是不再去抢夺锁了,一次失败,直接放弃。

    如果不是 -1,假如说是 10(单位是秒)那么 BCD… 失败后会择机再次去抢夺,这里的择机抢夺,就代表着不是与 A 抢夺失败后的立马再次抢夺,因为(明知道 A 抢过锁之后会执行自己的业务,需要一定的时间,那么 BCD... 立马再去抢夺锁的意义在哪里呢? 除了徒增 CPU 的负担,没有太大意义)所以这里的择机抢夺,其实是利用了 发布 - 订阅机制。

    Redis Redisson tryLock函数参数使用分析

    从上面的图片可以看到,A 抢过锁之后,执行业务,结束之后释放锁,释放锁的时候还 publish (发布)编程客栈了一个信号,而有人发布,就php有人订阅,发布人是 A,订阅人是 BCD… 所以说这里的择机再次抢夺是在 BCD… 接收到 A 发布的消息之后再去抢夺。

    当然了,从第一次与 A 抢夺失败,到等待 A 完成业务发布消息这段等待时间 + 第一次和 A 抢夺锁的时间 总数不能超过 10s,毕竟 10s 就是硬性规定,10s 之内,不论发生多么复杂的逻辑,只要拿到锁就行,不行就直接放弃。

    超时施放时间

    就是说 A 拿到了锁之后, 如果发生了一些异常错误,内部业务没能正常的执行,没能正常执行释放锁的操作,这个时候 这个超时施放时间才会起作用,也就是说,在 A 抢到锁之后,即便 A 的业务出现了堵塞,但是只要没发生一些异常情况,这里的超时施放时间是不起编程作用的,因为只要不发生异常,内部就会有一个 看门狗,每隔超时施放时间/3就会刷新一次锁的过期时间(是一个定时任务),确保 A 能够执行完成业务,当然,A 执行完业务后,会删除刷新有效期的定时任务。

    所以说,超时释放时间在正常执行业务的时候,是不发挥作用的,YxgTfNRLv只在出现异常的时候才会起作用。

    总结

    以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程客栈(www.devze.com)。

    0

    精彩评论

    暂无评论...
    验证码 换一张
    取 消

    关注公众号