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。

部署模式

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


相关推荐
程序员老邢9 小时前
《技术底稿 43》今日踩坑复盘:Redis 乱码 + MySQL 配置注入失败
redis·技术底稿·redisson 序列化·mysql 配置·项目踩坑·微服务问题排查
phltxy11 小时前
RabbitMQ集群搭——多机多节点与单机多节点
分布式·rabbitmq·ruby
Mr. zhihao12 小时前
Redis五大高级数据结构:原理-场景-底层-横向对比
数据结构·redis
YL2004042616 小时前
【Redis实战篇】秒杀实现方案(以优惠券秒杀为例)
数据库·redis
三十..16 小时前
Ceph分布式存储核心技术精要与运维实践指南
运维·分布式·ceph
better_liang17 小时前
每日Java面试场景题知识点之-如何设计分布式锁
java·redis·zookeeper·面试·分布式锁
自传.18 小时前
Redis 高频考试面试知识点1
redis·aof·rdb·redis面试
小新同学^O^18 小时前
Redis的简单总结
数据库·redis·学习
憧憬成为java架构高手的小白20 小时前
黑马八股redis
数据库·redis·缓存