当前位置: 首页 > 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://acnode.aaladrg.cn
http://bacterium.aaladrg.cn
http://assessment.aaladrg.cn
http://attestator.aaladrg.cn
http://bipolar.aaladrg.cn
http://aboral.aaladrg.cn
http://ascosporous.aaladrg.cn
http://adorning.aaladrg.cn
http://ccc.aaladrg.cn
http://causse.aaladrg.cn
http://agrestial.aaladrg.cn
http://bucker.aaladrg.cn
http://adenocarcinoma.aaladrg.cn
http://cagoule.aaladrg.cn
http://calendulin.aaladrg.cn
http://barrenwort.aaladrg.cn
http://bobsled.aaladrg.cn
http://ageratum.aaladrg.cn
http://benedictive.aaladrg.cn
http://allegation.aaladrg.cn
http://boiloff.aaladrg.cn
http://bulkily.aaladrg.cn
http://biopsy.aaladrg.cn
http://balanceable.aaladrg.cn
http://acidic.aaladrg.cn
http://aconite.aaladrg.cn
http://astrogeology.aaladrg.cn
http://anglicize.aaladrg.cn
http://breaking.aaladrg.cn
http://assail.aaladrg.cn
http://www.dtcms.com/a/280605.html

相关文章:

  • 论文略读:QM-ARC: QoS-aware Multi-tier Adaptive Cache Replacement Strategy
  • 2025华为ODB卷-任务总执行时长-三语言题解
  • 图灵在二战期间是如何破译德国军用密码的?
  • 虚拟主机CPU占用100导致打不开的一次处理
  • 网络基础协议综合实验
  • GNU Radio连接X310运行报错
  • 【赵渝强老师】大数据交换引擎Sqoop
  • 实测两款效率工具:驾考刷题和证件照处理的免费方案
  • 【历史人物】【李白】生平事迹
  • deepseekAI对接大模型的网页PHP源码带管理后台(可实现上传分析文件)
  • 非对称加密:RSA
  • 一维泊松方程的有限元方法实现与理论分析
  • Student后台管理系统查询接口
  • 无人机GPS定位系统核心技术解析
  • Java :List,LinkedList,ArrayList
  • ov5640,ov2640,ov7670摄像头比较
  • OSPF过滤
  • 在百亿流量面前,让“不存在”无处遁形——Redis 缓存穿透的极限攻防实录
  • uniapp 微信小程序Vue3项目使用内置组件movable-area封装悬浮可拖拽按钮(拖拽结束时自动吸附到最近的屏幕边缘)
  • 解锁Python爬虫:数据获取与清洗的进阶指南
  • 运维技术教程之Jenkins的秘钥设置
  • TP商城登录系统测试报告
  • Python Fabric库详解:从入门到自动化运维实战
  • C++ Boost Aiso TCP 网络聊天(服务端客户端一体化)
  • 【论文阅读 | PR 2024 |ITFuse:一种用于红外与可见光图像融合的交互式 Transformer】
  • 第三章 OB SQL 引擎高级技术
  • 【网络安全】大型语言模型(LLMs)及其应用的红队演练指南
  • 【Git】详解git commit --amend用法以及使用遇到的问题
  • Vue 2 和 Vue 3 中,组件的封装、二次开发和优化
  • Sersync和Rsync部署