Redis 分布式锁 + 部署模式

Redis 分布式锁 + 部署模式(面试满分答案,直接背)

我给你最标准、最简洁、面试官最爱听的版本,分两块讲:

  1. Redis 分布式锁怎么实现?(原理 + 问题 + 红锁)
  2. Redis 有哪些部署模式?(5 种,一句话记住)

一、Redis 分布式锁(面试必考)

1. 一句话核心原理

利用 Redis 单线程命令执行的原子性,通过 SETNX + 过期时间 实现互斥独占锁,防止多个节点同时操作共享资源。

2. 标准实现命令(必须正确)

正确命令:

复制代码
SET lock_key unique_value NX PX 30000
  • NX:只有不存在时才能设置(互斥)
  • PX 30000:30秒过期(防止死锁)
  • unique_value:唯一值(防止别人误删我的锁)

3. 完整流程

  1. 线程获取锁:SET key 唯一值 NX PX 超时时间
  2. 执行业务逻辑
  3. 通过 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. 分布式锁存在的问题(面试加分)

  1. 锁超时:业务执行时间 > 锁过期时间 → 锁被自动释放
  2. 主从切换问题:主节点加锁,同步到从节点前主挂了 → 从变主,锁丢失
  3. 不可重入:需要自己实现重入(用 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。

部署模式

单机 → 主从 → 哨兵(高可用)→ 集群(分片并发)。


相关推荐
imDwAaY2 小时前
Redis 哈希表如何边扩容边服务?讲透渐进式 Rehash
redis·哈希算法·散列表
仍然.3 小时前
Redis---主从复制
java·数据库·redis
Flynt12 小时前
Redis Cluster主节点挂了,为什么"高可用"还全员掉线?我把三次kill的记录翻出来了
数据库·redis·分布式
JosieBook14 小时前
【数据库】MySQL 实战精通系列 · 第10篇:分库分表与分布式事务实战
数据库·分布式·mysql
写后端的胖头鱼15 小时前
一文详解Cache Aside(旁路缓存模式)
redis·缓存·延迟双删·缓存一致
Web3&Basketball16 小时前
用FastAPI+Redis 复刻常驻Agent
redis·bootstrap·fastapi
梦帮科技17 小时前
vLLM / TensorRT-LLM 极限推理:PagedAttention 细粒度物理页表管理与连续批处理(Continuous Batching)实战
数据结构·人工智能·分布式·python·深度学习·算法·vllm
ly768920 小时前
Redis 主从复制全解析:从 PSYNC 协议到复制积压缓冲区的故障切换边界
java·数据库·redis·主从复制·故障切换·psync
hweiyu0020 小时前
Redis命令:HPEXPIREAT
redis·缓存
Frank_refuel1 天前
分布式RPC框架实战(二):服务端模块划分与底层设计
分布式·网络协议·rpc