首页/数据/数据库速查/分布式锁续期与看门狗(watchdog)
本包目录(495 条)
MySQL 基础与连接36 条SQL 语法52 条用户与权限21 条备份与恢复56 条主从复制与高可用53 条性能与调优57 条Redis 命令96 条
Redis 运维与场景124 条

分布式锁续期与看门狗(watchdog)

业务执行时间可能超过锁 TTL,需要后台看门狗定期续期(仍是自己的锁才延长):Redisson 默认每 1/3 TTL 续一次;续期失败要尽快中止业务以免双写。

数据库速查数据更新于 2026-10-12

Lua 续期

Lua 续期
-- 仍持有才刷新过期时间(毫秒)
if redis.call('GET', KEYS[1]) == ARGV[1] then
  return redis.call('PEXPIRE', KEYS[1], ARGV[2])
else
  return 0
end

调用与节奏

调用与节奏
EVAL "if redis.call('GET', KEYS[1]) == ARGV[1] then return redis.call('PEXPIRE', KEYS[1], ARGV[2]) else return 0 end" 1 lock:order:42 6f1d2c4e 10000
# 建议续期间隔 = TTL/3(如 TTL 30s -> 每 10s 续一次)
续期条件token 仍是自己的
失败处理续期失败/网络异常:尽快中止业务并核对数据
代价额外心跳流量;大量锁会放大压力
进程长时间 GC 停顿时续期线程同样会停:锁过期后出现双持有者窗口,关键业务要在下游加唯一约束或 fencing token 兜底。

易错点

  • 只在任务开始时续期一次:长任务中途锁仍会过期
  • 续期成功不代表业务安全:GC/暂停期间下游可能已被他人写入,需数据层兜底

数据来源与参考

  • Redis 官方文档: 分布式锁
  • Redisson 文档: 看门狗

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌