【Redis】高可用核心讲解

Redis 进阶篇:持久化 + 主从复制 + 哨兵 + 集群(面试必杀)

本篇你将掌握:

  • Redis 数据为什么不会完全丢
  • Redis 如何实现高可用
  • Redis 如何支撑大规模系统
  • 面试官最爱问的架构问题

一、Redis 为什么不会"完全丢数据"?

很多人以为:

text 复制代码
Redis = 内存数据库 = 一断电就没了 ❌

其实:

Redis 提供 持久化机制


二、Redis 持久化机制

Redis 有两种核心持久化方式:

方式 本质
RDB 快照
AOF 日志

1️⃣ RDB(快照模式)


什么是 RDB?

在某一时刻,把内存数据 拍个快照存到磁盘


类比理解
text 复制代码
RDB ≈ 游戏存档

触发方式
自动触发(配置)
bash 复制代码
save 900 1     # 900秒内有1次修改
save 300 10
save 60 10000

手动触发
bash 复制代码
SAVE      # 同步(阻塞)
BGSAVE    # 异步(推荐)

✅ 优点
  • 恢复速度快
  • 文件小
  • 性能影响低

❌ 缺点

会丢数据!

text 复制代码
最后一次快照之后的数据可能丢失

2️⃣ AOF(追加日志)


什么是 AOF?

把每一次写操作记录下来

text 复制代码
SET name Tom
INCR count

类比
text 复制代码
AOF ≈ 操作日志(回放恢复)

三种刷盘策略(面试必问)
策略 说明
always 每次写都同步(最安全)
everysec 每秒同步(推荐)
no 操作系统决定

✅ 优点
  • 更安全(最多丢1秒数据)

❌ 缺点
  • 文件大
  • 恢复慢

3️⃣ 面试标准答案

Redis 持久化如何选?

text 复制代码
生产环境:AOF + RDB 混合使用

Redis 4.0 之后:

  • 支持 混合持久化(AOF + RDB)

三、Redis 高可用:主从复制(核心)


为什么需要主从?

text 复制代码
单机 Redis → 容易挂 ❌

解决:

text 复制代码
一主多从(Master + Slave)

架构图(理解)

text 复制代码
        Master
        /   \
    Slave  Slave

原理(面试重点)

第一次同步(全量复制)
  1. Slave 发送请求
  2. Master 执行:
text 复制代码
BGSAVE → 生成 RDB
  1. 发送给 Slave
  2. Slave 加载数据

后续同步(增量复制)

通过 命令传播


面试加分点

Redis 复制是:

text 复制代码
异步复制(重要!)

四、Redis 哨兵(Sentinel)


为什么需要哨兵?

主从架构问题:

text 复制代码
Master 挂了怎么办?❌

哨兵的作用:

1️⃣ 监控 Redis

2️⃣ 自动故障转移

3️⃣ 选举新 Master


架构图

text 复制代码
 Sentinel  Sentinel  Sentinel
      \       |       /
           Redis集群

故障转移流程(面试重点)

  1. 哨兵发现 Master 挂了
  2. 投票选举新 Master
  3. Slave 升级为 Master
  4. 通知客户端

面试关键点

哨兵是:

text 复制代码
分布式系统(多个节点投票)

五、Redis 集群(Cluster)


为什么需要集群?

主从的问题:

text 复制代码
数据量太大 → 一台机器放不下 ❌

解决:

text 复制代码
Redis Cluster(分片)

核心思想

数据分散到多个节点


核心机制:Hash Slot(槽位)

Redis 有:

text 复制代码
16384 个槽位

数据分布

text 复制代码
key → hash → slot → 节点

示例

text 复制代码
Node1: 0-5000
Node2: 5001-10000
Node3: 10001-16383

面试高频问题

为什么是 16384?

权衡:

  • 太大 → 计算复杂
  • 太小 → 分布不均

集群特点

  • 去中心化
  • 自动分片
  • 支持扩容

六、Redis 架构总结


三种模式对比

模式 特点
单机 简单,但不可靠
主从 读写分离
哨兵 高可用
集群 高可用 + 高扩展

七、面试高频问题


1. RDB 和 AOF 区别?

text 复制代码
RDB:快照,恢复快,但可能丢数据  
AOF:日志,更安全,但恢复慢

2. Redis 如何保证高可用?

text 复制代码
主从复制 + 哨兵

3. Redis 集群如何分片?

text 复制代码
Hash Slot(16384)

4. 主从复制是同步的吗?

text 复制代码
不是 → 异步复制

5. 哨兵如何选主?

text 复制代码
投票机制(类似 Raft 思想)

八、实际开发建议


✅ 生产推荐架构

text 复制代码
Redis Cluster + 哨兵(或云服务)

✅ 持久化推荐

text 复制代码
AOF everysec + RDB

✅ 客户端建议

  • Spring Boot → Lettuce(默认)
  • 避免 Jedis 连接池问题

九、总结(面试速记版)


text 复制代码
Redis 高可用核心:

1. 持久化(RDB + AOF)
2. 主从复制(读写分离)
3. 哨兵(自动故障转移)
4. 集群(分片 + 扩展)
相关推荐
用户3169353811832 天前
Java连接Redis
redis
倔强的石头_2 天前
《Kingbase护城河》——数据库存储空间全景探测与精细化瘦身实战
数据库
冬奇Lab3 天前
每日一个开源项目(第134篇):Zvec - 阿里开源的嵌入式向量数据库,向量搜索界的 SQLite
数据库·人工智能·llm
ClouGence3 天前
Oracle CDC 架构优化:从主库直连到 DataGuard 备库同步
数据库·后端·oracle
无响应de神3 天前
三、用户与权限管理
数据库·mysql
小小工匠4 天前
Redis - 事务机制:能实现 ACID 属性吗
数据结构·redis·性能优化·并发·持久化
麦聪聊数据4 天前
数据服务化时代:企业数据能力输出的核心路径
数据库
shushangyun_4 天前
2026年快消品B2B系统推荐:支持终端门店订货、促销政策自动化的工具?
java·运维·网络·数据库·人工智能·spring·自动化
DARLING Zero two♡4 天前
【MySQL数据库】数据类型与表约束
数据库·mysql
ofoxcoding4 天前
在AI API聚合平台配置DeepSeek V3.2提示词缓存实战:快速接入与成本优化指南
人工智能·spring·缓存·ai