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。

部署模式

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


相关推荐
独行侠影a3 小时前
APScheduler+Redis 分布式定时任务:解决多实例任务重复执行
数据库·redis·分布式
香菜TTT6 小时前
Kafka_深度解析_从架构原理到生产实践
分布式·架构·kafka·linq
不在逃避q7 小时前
Golang笔记之Redis
redis·笔记·golang
zcmodeltech11 小时前
智能矿井沙盘模型多系统协同控制系统设计:基于STM32与Modbus RTU的感知-传输-控制一体化方案
服务器·数据库·分布式·stm32·单片机·嵌入式硬件
江晓鱼未暖12 小时前
十七、Redis 核心原理与架构详解
大数据·数据库·数据仓库·redis·缓存·架构
红莲凪是12 小时前
Redis有哪些部署方案?了解哨兵机制吗?
java·redis·eureka
wWYy.12 小时前
基于Raft分布式Kv存储:RPC调用
分布式·rpc
小罗水12 小时前
第13章 Redis 缓存、幂等锁与任务状态
数据库·redis·缓存
笨蛋不要掉眼泪12 小时前
RabbitMQ消息队列:SpringAMQP
java·分布式·rabbitmq
发量惊人的中年网工13 小时前
SD-WAN如何赋能工业物联网?打造工厂网络远程连接和数据传输新方案
运维·网络·分布式·物联网