Redis 分布式锁
面试官问:"Redis 怎么做分布式锁?"
小陈说:"用 setnx。"
面试官追问:"setnx 过期了怎么办?锁自动释放了,但业务还没执行完?"
小陈说:"...延长过期时间?"
面试官继续追问:"怎么保证锁的安全释放(只能释放自己的锁)?"
小陈答不上来。
分布式锁是 Redis 面试中的高频题,也是最容易出错的实现。这道题能说清楚 setnx + Lua + 续期机制的候选人,对分布式锁的复杂性有实战理解。
一、分布式锁基础 🔴
1.1 为什么需要分布式锁
1.2 分布式锁的要求
二、setnx + EXPIRE 的坑 🔴
2.1 非原子性问题
2.2 正确实现:set nx ex
2.3 ❌ 错误示范
候选人原话:"用 setnx 加锁,expire 设置过期时间。"
问题诊断:setnx 和 expire 是两条命令,不原子。如果在两条命令之间 Redis 挂了,锁永不过期。
【面试官心理】 这道题我会从"原子性"追问。能说出"set + nx + ex 是一条命令保证原子性"的候选人,说明他理解了分布式锁的正确实现。
三、安全释放锁 🟡
3.1 问题
3.2 解决:Lua 脚本原子释放
四、锁续期(Watchdog)🟡
4.1 过期时间的问题
4.2 Watchdog 续期机制
五、完整实现 🟡
5.1 简单实现
六、生产注意事项 🟢
6.1 Redis 分布式锁的局限性
【面试官心理】 分布式锁是 Redis 面试中的高级话题。能说清楚 setnx + Lua + 续期机制、以及 Redis 分布式锁局限性的候选人,说明他对分布式系统的复杂性问题有深入理解。