Redisson 中开启看门狗(watchdog)机制

server/2024/11/20 13:58:00/

在 Redisson 中开启看门狗(watchdog)机制,主要依赖于 tryLock() 方法或者 lock() 方法,并设置合理的锁超时时间。看门狗机制会在锁的持有期间自动续期,确保业务逻辑能够在锁释放前完成。以下是开启看门狗的具体步骤:

  1. 在 Redisson 的配置中设置看门狗的超时时间,例如:

    java">Config config = new Config();
    config.setLockWatchdogTimeout(30000L); // 设置看门狗超时时间为30000毫秒

    这个配置会启动一个定时任务,在业务释放锁之前,会一直不停的增加这个锁的有效时间,从而保证在业务执行完毕前,这把锁不会被提前释放掉。

  2. 使用 tryLock() 方法获取锁,并设置超时时间。如果锁被其他线程持有,则立即返回 false,而不会阻塞当前线程。例如:

    java">RLock lock = redissonClient.getLock("my-lock");
    boolean acquired = lock.tryLock(0, 10000, TimeUnit.MILLISECONDS);
    if (acquired) {try {// 执行业务逻辑} catch (Exception e) {// 异常处理} finally {lock.unlock();}
    } else {// 获取锁失败,处理获取锁失败逻辑
    }

    在上述示例中,tryLock(0, 10000, TimeUnit.MILLISECONDS) 表示尝试获取锁,如果锁被其他线程持有,则立即返回 false,不会阻塞当前线程。锁的超时时间设置为10000毫秒。

  3. 如果需要手动控制看门狗,可以通过编程方式开启看门狗。例如:

    java">RLock lock = redissonClient.getLock("my-lock");
    lock.lock(5000, TimeUnit.SECONDS); // 加锁并设置超时时间为5000秒

    在上述示例中,lock(5000, TimeUnit.SECONDS) 表示加锁并设置超时时间为5000秒。如果业务逻辑执行时间超过5000秒,看门狗会自动续期,确保锁不会被释放。

通过以上步骤,可以在 Redisson 中开启看门狗机制,确保分布式锁在业务逻辑执行期间不会被提前释放。


http://www.ppmy.cn/server/143483.html

相关文章

蓝桥杯——杨辉三角

代码 package day3;public class Demo2 {public static void main(String[] args) {// TODO Auto-generated method stub// for (int i 0; i < 10; i) {// for (int j 0; j < 10; j) {// System.out.print("外&#xff1a;"i"内&#xff1a;&qu…

二本学院非科班天崩开局,如何逆天改命拿下大厂后端

天崩开局&#xff0c;如何破局自救 2021 年高考结束&#xff0c;我当时的第一志愿是计算机科学与技术专业&#xff0c;但是我被录取到了河南工程学院的高分子材料与工程专业。 我去咨询计算机相关行业的从业者&#xff0c;以及多方面网络搜集相关信息之后得到了一个很现实的消…

下一代以区域为导向的电子/电气架构

我是穿拖鞋的汉子&#xff0c;魔都中坚持长期主义的汽车电子工程师。 老规矩&#xff0c;分享一段喜欢的文字&#xff0c;避免自己成为高知识低文化的工程师&#xff1a; 所有人的看法和评价都是暂时的&#xff0c;只有自己的经历是伴随一生的&#xff0c;几乎所有的担忧和畏惧…

11.19 机器学习-岭回归+拉索回归+逻辑回归

# 欠拟合 训练不够 # 过拟合 训练太够了 噪声也学进去了 # 一般来说w的值越大 误差越大 w的值小误差小 但也不能太小 不然失去了应用的意义 # 防止 欠拟合和过拟合的方式 就岭回归和拉索回归 正则化 # 本质上就是牺牲模型在训练集上的正确率来提高推广、泛化能力&#xff0…

游戏引擎学习第13天

视频参考:https://www.bilibili.com/video/BV1QQUaYMEEz/ 改代码的地方尽量一张图说清楚吧,懒得浪费时间 game.h #pragma once #include <cmath> #include <cstdint> #include <malloc.h>#define internal static // 用于定义内翻译单元内部函数 #…

使用OpenFeign+Eureka实现HTTP调用的简单示例

由于RPC调用需要使用注册中心&#xff0c;所以首先需要创建eureka服务&#xff0c;创建SpringBoot项目后导入spring-cloud-starter-netflix-eureka-server&#xff0c;注意SpringBoot和SpringCloud版本一致性&#xff0c;然后进行配置&#xff0c;启动类添加注解EnableEurekaSe…

排序排序的概念及其运用和选择排序

排序排序的概念及其运用和选择排序 7. 排序7.1 排序的概念及其运用7.2 选择排序算法——直接选择排序选择排序基本思想&#xff1a;直接选择排序选择排序原理参考程序 如何交换数据直接选择排序的特性总结&#xff1a; 7. 排序 7.1 排序的概念及其运用 排序&#xff1a;所谓排…

诡异错误:返回给前端的id被前端自动修改

使用mybatis-plus生成的id&#xff0c;使用雪花算法&#xff0c;是一个long类型的id。 当调用list接口返回给前端后&#xff0c;接口显示数据正常&#xff0c;但是界面上的id不对&#xff0c;多了好几个0&#xff0c;数据都是以0结尾。 由于前端使用vue编写&#xff0c;我不太会…