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。

部署模式

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


相关推荐
用户3169353811831 天前
Java连接Redis
redis
小小工匠3 天前
Redis - 事务机制:能实现 ACID 属性吗
数据结构·redis·性能优化·并发·持久化
taocarts_bidfans3 天前
反向海淘跨境缓存架构优化:taocarts Redis分层缓存实战技术
redis·缓存·架构·反向海淘·taocarts
风吹夏回3 天前
RabbitMQ 核心术语 + Python pika 方法完整讲解
分布式·python·rabbitmq
炘爚3 天前
Linux——Redis
数据库·redis·缓存
csjane10793 天前
Redisson 限流原理
java·redis
风吹夏回3 天前
RabbitMQ 三种模式入门:HelloWorld、WorkQueue、PubSub
分布式·rabbitmq·ruby
ThanksGive3 天前
Go 服务里的 Redis 锁惊群问题:一次本地合流优化实践
redis
小挪号底迪滴3 天前
Redis 和 MySQL 数据不一致怎么办?缓存更新策略实战
redis·mysql·缓存