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

redis分布式锁实现Redisson+redlock中watch dog是如何判断当前线程是否持有锁进行续租的呢?

在 Redis 中,Watch Dog(看门狗)机制主要用于实现分布式锁的自动续期(如 Redisson 的 RedLock 实现)。其核心目的是确保当业务逻辑执行时间超过锁的初始过期时间(leaseTime)时,锁不会因过期而被其他线程/进程误获取。以下是 Watch Dog 判断当前线程是否持有锁并进行续租的核心逻辑:


1. 锁的唯一标识符

当线程成功获取锁时,Redis 中存储的锁值(Value)会包含一个 客户端唯一标识符(如 UUID)线程 ID。例如:

SET my_lock "客户端UUID:线程ID" NX PX 30000

这一标识符由客户端生成,确保全局唯一性,并保存在客户端内存中。


2. Watch Dog 的续租条件

Watch Dog 通过以下步骤判断当前线程是否持有锁:

  1. 检查本地锁状态
    客户端在内存中维护锁的持有状态。如果当前线程已释放锁(主动调用 unlock()),Watch Dog 会直接停止续租。

  2. 验证 Redis 中的锁值
    Watch Dog 定期(如每 10 秒)向 Redis 发送一个 原子性 Lua 脚本,执行以下操作:

    if redis.call("GET", KEYS[1]) == ARGV[1] then
        redis.call("PEXPIRE", KEYS[1], ARGV[2])
        return 1
    else
        return 0
    end
    
    • KEYS[1]:锁的名称(如 my_lock)。
    • ARGV[1]:预期的锁值(客户端 UUID + 线程 ID)。
    • ARGV[2]:新的过期时间(如 30000 毫秒)。

    只有当 Redis 中锁的值与客户端保存的标识符一致时,才会续期锁的过期时间。


3. 关键设计要点

  • 原子性操作
    通过 Lua 脚本确保 “检查锁值”“续期锁” 是原子操作,避免并发问题。

  • 本地状态与 Redis 状态的强一致性

    • 若 Redis 中的锁已被其他客户端抢占(值不匹配),Watch Dog 立即停止续租,客户端会抛出异常通知业务逻辑。
    • 若客户端崩溃,Watch Dog 停止运行,锁最终因过期自动释放,避免死锁。
  • 可重入锁的支持
    如果锁是重入的(同一线程多次获取锁),客户端内部通过计数器跟踪重入次数。Watch Dog 只在锁被完全释放(计数器归零)时停止续租。


4. 流程总结

  1. 客户端获取锁成功后,启动 Watch Dog 定时任务。
  2. Watch Dog 定期检查本地锁状态,若未释放则触发续租。
  3. 通过 Lua 脚本验证 Redis 中的锁值是否仍属于当前线程。
  4. 验证通过则续期锁的过期时间,否则放弃续租并处理锁失效逻辑。

5. 注意事项

  • 网络分区风险
    若客户端与 Redis 发生长时间网络分区,Watch Dog 可能无法续租,锁最终会过期。此时业务需自行处理锁失效后的逻辑(如回滚)。

  • 性能开销
    Watch Dog 的定时续期会增加 Redis 的负载,需合理设置续期间隔(如 Redisson 默认 lockWatchdogTimeout=30秒)。

通过上述机制,Watch Dog 在保证安全性的前提下,实现了分布式锁的自动续期,确保长任务执行期间锁的持有权不被意外释放。

相关文章:

  • Redis HyperLogLog
  • 希尔伯特变换
  • http header参数的key包含下划线时遇到的一个问题
  • 1. 初识golang微服务-gRPC
  • Vite+微前端Qiankun-状态管理
  • 【GL008】C++ 入门基础(2)之 多态案例
  • centos【rockylinux】安装【supervisor】的注意事项【完整版】
  • Android开发中的Native 调试
  • Go语言的基础类型
  • STM32和PN532 寻卡实验
  • Springboot项目打包成war包
  • 西门子PLC
  • Freeze-Omni:冻结 LLM,实现语音对话
  • 半导体过程控制篇6 设计质量控制SPC
  • ​第十一届传感云和边缘计算系统国际会议
  • python中测试数据管理整理
  • Spring Cloud之负载均衡之LoadBalance
  • 汇川EASY系列之以太网通讯(MODBUS_TCP做主站)
  • 【工具变量】人口老龄化对经济增长影响数据集(2005-2023年)
  • Python列表1
  • 《大风杀》上海首映,白客说拍这戏是从影以来的最大挑战
  • “五一”假期首日迎出游高峰:火车站人流“堪比春运”,热门景区门票预订量同比增三成
  • 申活观察|咖香涌动北外滩,带来哪些消费新想象?
  • 购车补贴、“谷子”消费、特色产品,这些活动亮相五五购物节
  • 辽宁省全力开展辽阳一饭店火灾事故救援处置工作
  • 总书记考察的上海“模速空间”,是一个怎样的空间?