当前位置: 首页 > news >正文

redisson 设置了过期时间,会自动续期吗

如果设置了过期时间30,看门狗机制 当leaseTime = -1时触发:,这时候不等于-1,怎么续期的

Redis 看门狗机制与续期问题解析

在 Redis 分布式锁实现中(如 Redisson),看门狗机制用于自动续期锁的有效期。针对您的问题:

看门狗机制工作逻辑

  1. 当 leaseTime = -1 时

    • 看门狗机制会生效,自动续期锁

    • 默认情况下,锁的过期时间是 30 秒

    • 看门狗会每隔 10 秒(默认)检查一次,如果锁仍被持有,则将其续期到 30 秒

  2. 当 leaseTime ≠ -1 时

    • 看门狗机制不会自动续期锁

    • 锁会在指定的 leaseTime 后自动过期

    • 这是设计上的有意行为,适用于你希望精确控制锁生命周期的场景

如何在不等于 -1 时实现续期

如果您设置了具体的 leaseTime 但又想实现续期功能,有几种解决方案:

方案1:使用 -1 启用看门狗

java

// 使用看门狗自动续期
RLock lock = redisson.getLock("myLock");
lock.lock(); // 默认 leaseTime = -1,看门狗生效

方案2:手动续期

java

RLock lock = redisson.getLock("myLock");
lock.lock(30, TimeUnit.SECONDS); // 设置具体leaseTime// 在需要时手动续期
if (lock.isHeldByCurrentThread()) {lock.expire(30, TimeUnit.SECONDS); // 重新设置30秒过期
}

方案3:自定义续期逻辑

java

// 使用定时任务定期续期
ScheduledExecutorService executor = Executors.newScheduledThreadPool(1);
executor.scheduleAtFixedRate(() -> {if (lock.isHeldByCurrentThread()) {lock.expire(30, TimeUnit.SECONDS);}
}, 10, 10, TimeUnit.SECONDS); // 每10秒检查一次

注意事项

  1. 手动续期时需要确保:

    • 当前线程仍然持有锁

    • 处理好异常情况

    • 避免无限续期导致死锁

  2. 性能考虑:

    • 频繁续期会增加 Redis 负载

    • 需要合理设置续期间隔

  3. 在 finally 块中确保释放锁:

    java

    try {lock.lock(30, TimeUnit.SECONDS);// 业务逻辑
    } finally {if (lock.isHeldByCurrentThread()) {lock.unlock();}
    }

选择哪种方案取决于您的具体业务需求和对锁生命周期的控制要求。

http://www.xdnf.cn/news/1125973.html

相关文章:

  • 【网络安全】大型语言模型(LLMs)及其应用的红队演练指南
  • 经典排序算法之希尔排序
  • docker 方式gost代理搭建以及代理链实施
  • HTTP常见误区
  • 具身智能零碎知识点(六):VAE 核心解密:重参数化技巧(Reparameterization Trick)到底在干啥?
  • 第二章 OB 存储引擎高级技术
  • JavaScript进阶篇——第四章 解构赋值(完全版)
  • IT岗位任职资格体系及发展通道——研发岗位任职资格标准体系
  • 进程探秘:从 PCB 到 fork 的核心原理之旅
  • 从零开始的云计算生活——第三十二天,四面楚歌,HAProxy负载均衡
  • 测试tcpdump,分析tcp协议
  • JAVA学习笔记 使用notepad++开发JAVA-003
  • Bootstrap-HTML(七)Bootstrap在线图标的引用方法
  • SELinux 详细解析
  • 【安卓笔记】RxJava之flatMap的使用
  • python原生处理properties文件
  • 第十四章 Stream API
  • 【第二章自定义功能菜单_MenuItemAttribute_顶部菜单栏(本章进度1/7)】
  • 零售企业用户行为数据画像的授权边界界定:合规与风险防范
  • 16、鸿蒙Harmony Next开发:组件扩展
  • RAG实战指南 Day 16:向量数据库类型与选择指南
  • Django+Celery 进阶:动态定时任务的添加、修改与智能调度实战
  • 第三章 OB SQL 引擎高级技术
  • PostgreSQL 数据库中 ETL 操作的实战技巧
  • 深入探讨Hadoop YARN Federation:架构设计与实践应用
  • docker搭建freeswitch实现点对点视频,多人视频
  • 综合网络组网实验(机器人实验)
  • Java 避免空指针的方法及Optional最佳实践
  • 【Linux系统】命令行参数和环境变量
  • 【Java篇】IntelliJ IDEA 安装与基础配置指南