锁 TTL 到期但业务未结束如何处理,WatchDog 如何续期?

考查重点:租期续约与旧执行者隔离。业务未完锁到期可并发进入,Watchdog 到期前续租;还需业务超时和旧执行者隔离,防无限续卡死

本题目录

参考答案

核心回答

锁的 TTL 到期后,其他执行者就可能获得同一资源的锁,而旧执行者的业务代码不会因此自动停止。因此业务仍在执行时锁过期,会出现两个执行者同时访问资源的风险。

看门狗在租约结束前确认持有者仍有效,并延长锁的过期时间,避免正常长任务提前失锁。它解决的是租约存活问题,不等于永久互斥:长时间暂停、网络分区或续约失败后,旧任务仍可能恢复执行。关键写入要用版本条件或资源端支持的 fencing token 拒绝迟到操作。

续约怎样安排

初始租期要覆盖正常执行和合理抖动,续约在到期前留出余量。续约必须原子地校验持有者身份并更新过期时间,不能看到键存在就给别人续租;释放也必须校验身份。

以 Redisson RLock 为例,不指定显式租期的常用加锁方式可启用看门狗,默认看门狗超时为三十秒;显式设置 leaseTime 时按固定租期释放,不能再假设自动续约。实际调度与异常行为还要以所用版本为准。

如何处理失锁与卡死

任务设置业务截止时间、外部请求超时和取消机制;续约失败时停止继续发起受保护操作,检查关键写入结果。线程还活着不代表业务在推进,因此不能把持续续租当成健康检查。

如果执行者在暂停后无法及时知道自己已经失锁,只在写入前查询一次锁也存在检查与使用之间的竞态。更严格的方案是在每次获得锁时生成单调递增令牌,下游原子拒绝旧令牌;下游不校验令牌,单独生成一个数字并不能提供隔离。

同时考虑唯一约束、状态机与幂等。它们保护业务结果,不能被一条自动续期配置代替。

对应教程

参考资料

相关面经

4 篇

字节跳动

Agent 开发
校招秋招一面、二面、三面
查看原面经 →
追问
如果业务没有执行完锁就过期了,怎样处理?

美团

AI 全栈开发工程师
校招秋招二面
查看原面经 →
Redis分布式锁怎么实现?锁过期了业务还没执行完怎么办

小红书

AI Native 全栈开发工程师
日常实习一面、二面
查看原面经 →
Redis 锁 TTL 到期但业务没有结束怎么办?
Redisson WatchDog

有赞

后端开发工程师(AI / Agent 方向)
查看原面经 →
追问
如何实现锁续期

收录题集

1 个来源,共1 份题集

相关题目

4 题