
分布式锁是并发控制的手段,不是目标。动手之前先确认:这个互斥能不能用「数据库唯一约束」「乐观版本号」「幂等设计」解决?能的话就不要引入锁——锁带来的是可用性依赖、续期复杂性、死锁风险三件套。只有在「多实例互斥执行一段非幂等逻辑」的真实需求下(定时任务防重跑、防止缓存击穿重建、库存防超卖兜底),分布式锁才是正确工具。一、三种实现的真实边界
INSERT ... ON DUPLICATE KEY 或唯一索引 + GET_LOCK。最笨但最可靠——依赖已有的数据库高可用,无需新组件。低频互斥(分钟级定时任务防重)直接用数据库锁,别为了一个锁引入 Redis/ZK 依赖。
资金/库存级强互斥 → 数据库唯一约束兜底 + Redis/DB 锁双保险;一般互斥(任务防重跑、缓存重建)→ Redis 单实例锁 + 看门狗 + 值校验释放;已有 ZK/etcd 且要求强互斥 → 直接用其锁实现;低频场景 → 数据库锁。

锁做得对不对,用三个测试验证:持锁方执行超过 TTL 后不出现双执行(或双执行被兜底拦截);A 释放锁后 B 立即可获取;主从切换/客户端宕机后锁在预期时间内可被重新获取。通过这三关,锁才敢上生产。
分布式锁的工程真相:它不是保证 100% 互斥的银弹,而是把互斥失效概率压到业务可接受范围、并给每次失效准备好兜底手段的组合方案。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。