Redis 分布式锁 + 部署模式(面试满分答案,直接背)
我给你最标准、最简洁、面试官最爱听的版本,分两块讲:
- Redis 分布式锁怎么实现?(原理 + 问题 + 红锁)
- Redis 有哪些部署模式?(5 种,一句话记住)
一、Redis 分布式锁(面试必考)
1. 一句话核心原理
利用 Redis 单线程命令执行的原子性,通过 SETNX + 过期时间 实现互斥独占锁,防止多个节点同时操作共享资源。
2. 标准实现命令(必须正确)
正确命令:
SET lock_key unique_value NX PX 30000
- NX:只有不存在时才能设置(互斥)
- PX 30000:30秒过期(防止死锁)
- unique_value:唯一值(防止别人误删我的锁)
3. 完整流程
- 线程获取锁:
SET key 唯一值 NX PX 超时时间 - 执行业务逻辑
- 通过 Lua 脚本释放锁(判断唯一值 + 删除,原子性)
4. 为什么必须用 Lua 删锁?
因为:
判断锁是否属于自己 + 删除锁 必须是原子操作,否则并发会出现删别人锁的问题。
Lua 脚本:
lua
if redis.call("get",KEYS[1]) == ARGV[1]
then
return redis.call("del",KEYS[1])
else
return 0
end
5. 分布式锁存在的问题(面试加分)
- 锁超时:业务执行时间 > 锁过期时间 → 锁被自动释放
- 主从切换问题:主节点加锁,同步到从节点前主挂了 → 从变主,锁丢失
- 不可重入:需要自己实现重入(用 Hash 存储)
6. 解决主从锁丢失:Redlock(红锁)
原理:
- 向 N/2 + 1 个独立 Redis 节点 加锁
- 大多数加锁成功才算成功
- 避免单点/主从切换丢锁
面试一句话:
Redlock 是针对 Redis 集群/主从模式下锁丢失问题的解决方案,通过向多个独立实例加锁,确保强一致性。
二、面试标准答案(直接背)
Redis 分布式锁通过 SET 命令带上 NX(互斥)和 PX(超时)实现,保证原子性;
必须设置唯一值,并用 Lua 脚本原子释放锁,避免误删;
解决了分布式下并发安全问题,但存在锁超时、主从切换丢锁问题,可通过 Redlock 红锁保证高可靠。
三、Redis 部署模式(5 种,面试必问)
1. 单机模式(Standalone)
- 单实例
- 测试用,生产不用
2. 主从模式(Master-Slave)
- 一主多从
- 主写、从读
- 无自动故障转移
3. 哨兵模式(Sentinel)
- 主从 + Sentinel 集群
- 自动监控、故障转移、主节点自动切换
- 生产常用
4. 集群模式(Redis Cluster)
- 多主多从
- 数据分片存储(16384 个槽)
- 横向扩展,高并发
- 生产大规模用
5. 云托管模式(如阿里云Redis)
- 厂商托管,不用自己运维
四、部署模式面试标准答案(直接背)
Redis 部署模式有 5 种:单机、主从、哨兵、集群、云托管。
主从实现读写分离;哨兵实现高可用自动切换;集群实现分片扩容,支撑高并发。
五、终极精简版(30 秒背完)
分布式锁
SET key 唯一值 NX PX 超时,Lua删锁,防死锁、误删,主从切换丢锁用Redlock。
部署模式
单机 → 主从 → 哨兵(高可用)→ 集群(分片并发)。