题目9:分布式锁设计
📊 评分:— | 📅 完成时间:待完成
📝 题目
如果让你设计一个分布式锁,你会怎么做?基于 Redis 的分布式锁有哪些关键点?有哪些常见问题?
💬 我的回答
📖 参考答案
一、核心目标
- 互斥
- 避免死锁
- 可重试
- 最好支持续期和可观测
二、Redis 分布式锁常见实现
redis
SET lock_key unique_value NX PX 30000关键点:
NX:只在 key 不存在时加锁PX:设置过期时间,避免死锁unique_value:解锁时校验,避免误删别人的锁
三、安全释放锁
需要用 Lua 保证校验 value 和删除 key 的原子性。
四、常见问题
- 业务执行时间超过锁过期时间
- Redis 主从切换导致锁丢失
- 锁竞争激烈时吞吐下降
- 抢到锁的客户端宕机
五、延伸回答
- 看门狗续期机制
- Redisson 实现思路
- Redis 锁和 ZooKeeper 锁的区别
🎯 面试标准话术
"Redis 分布式锁的核心不是
setnx这一个命令,而是加锁、过期、续期、解锁原子性和主从切换一致性要一起考虑。面试里最好强调唯一 value 和 Lua 解锁,否则很容易被追问。"