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 兜底。