当前位置: 首页 > 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.lryc.cn/news/588774.html

相关文章:

  • [ctfshow web入门]web98 学习PHP的引用
  • LeetCode 3136.有效单词:遍历模拟
  • 21.映射字典的值
  • 连接new服务器注意事项
  • 非实时的防控场景
  • LLM面试题及讲解 4
  • 【Tauri】Tauri 2.x+Vue自动更新教程对接后端接口更新
  • C++--哈希
  • CPU寄存器、进程上下文与Linux O(1)调度器原理
  • 知识付费小程序资质全解析
  • 进程的内存映像,只读区,可读写区,堆,共享库,栈详解
  • 【机器学习基础【5】】Python数据科学三件套:从数据创建到处理再到可视化实战
  • 链表的 哑结点的本质
  • 排序算法实战(上)
  • 经典排序算法之希尔排序
  • 解锁Python爬虫:数据获取与清洗的进阶指南
  • 深入浅出 RabbitMQ-核心概念介绍与容器化部署
  • Zabbix钉钉告警
  • 如何将华为文件传输到电脑
  • C++ - 仿 RabbitMQ 实现消息队列--muduo快速上手
  • 每日钉钉API探索:chooseUserFromList灵活选取自定义联系人
  • 变更缓冲池简介
  • Git分支管理与工作流详解
  • STL的一些知识点
  • Java-特殊文件、日志技术
  • RTDETR融合CFFormer中的FeatureCorrection_s2c模块
  • 下一代防火墙-web防护
  • Android弹窗
  • 2025牛客暑期多校训练记录
  • Ubuntu 22.04 安装 mysql-server服务端