← 每日面试题 学习看板

实现一个分布式锁需要考虑哪些问题?

面试题/02架构设计题/02分布式/03分布式锁/实现一个分布式锁需要考虑哪些问题?.md

面试记录 2026-10-08

题目:实现一个分布式锁需要考虑哪些问题?

难度:medium

标签:arch/distributed/lock, distributed/lock, difficulty/medium

评分:⭐⭐⭐⭐☆(4/5)

我的回答

分布式锁要考虑哪些问题?锁要考虑性能,性能要高一些,一致性。锁的核心也就是一致性嘛,要保证几个线程看到的同一时间的是同样的。一致性对应的还有可用性。但是锁一般保证的是强一致,所以根据 CAP,它会放弃一定的可用性。锁如果出现问题了需要做补偿。另外就是可重入。一个锁在连续锁的情况下,根据单点锁生成的原理要考虑可重入,加几次锁要保证锁是一致的,同一个锁而不是多个锁。然后是加锁要考虑死锁问题,要定期的释放,比如使用 Redis 锁的话,要给锁进行释放,设置过期时间。另外就是如果锁内的持续事务没有完成,要考虑锁的续期。基本上就是这些了。

点评

优点:六维系统思考(性能/一致性/CAP/补偿/可重入/死锁/续期);CAP 权衡理解到位;区分死锁防护与锁续期。

不足:未提锁持有者校验(防误删);未提主从切换丢锁风险;"补偿"表述模糊(锁失败应走重试/幂等兜底而非补偿);遗漏锁粒度、公平性、可观测性;未提选型建议。

补充:安全性 checklist——原子性/持有者标识/过期时间/watchdog 续期/可重入计数;主流方案对比 Redis(AP+watchdog)vs ZK(CP+临时节点)vs etcd(Raft+Lease)。

完整讲解

第一部分:知识重点剖析

核心考点定位:考察分布式锁的工程化 checklist——不是"能不能加锁",而是"能不能安全地加锁"。

知识点拆解:

  1. 正确性维度:
  1. 可靠性维度:
  1. 可用性维度:
  1. CAP 权衡:
按「正确性 → 可靠性 → 可用性 → CAP 权衡」四层递进。

第二部分:考察方向与延伸递进

考察方向:

延伸递进面试题:

  1. Redis 分布式锁的解锁 Lua 脚本怎么写?为什么不能分开执行 GET + DEL?
  1. watchdog 机制具体如何工作?如果持锁线程 hang 死了怎么办?
  1. 分布式锁和幂等控制是什么关系?是重复的吗?

第三部分:面试者参考回答(300-600 字口语化)

面试官您好,实现一个分布式锁,我会从正确性、可靠性、可用性、CAP 权衡四个维度去考虑。

正确性层面:

可靠性层面:

可用性层面:

CAP 权衡:

实际项目中通常是分布式锁 + 业务幂等组合使用——锁挡并发重复进入,幂等兜底防止极端情况下重复执行。