【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. 集群(分片 + 扩展)
相关推荐
瀚高PG实验室14 小时前
审计策略修改
网络·数据库·瀚高数据库
言慢行善14 小时前
sqlserver模糊查询问题
java·数据库·sqlserver
韶博雅15 小时前
emcc24ai
开发语言·数据库·python
有想法的py工程师15 小时前
PostgreSQL 分区表排序优化:Append Sort 优化为 Merge Append
大数据·数据库·postgresql
迷枫71215 小时前
达梦数据库的体系架构
数据库·oracle·架构
夜晚打字声16 小时前
9(九)Jmeter如何连接数据库
数据库·jmeter·oracle
Chasing__Dreams16 小时前
Mysql--基础知识点--95--为什么避免使用长事务
数据库·mysql
风吹迎面入袖凉16 小时前
【Redis】Redis的五种核心数据类型详解
java·redis
NineData16 小时前
NineData 智能数据管理平台新功能发布|2026 年 3 月
数据库·oracle·架构·dba·ninedata·数据复制·数据迁移工具
小陈工16 小时前
2026年4月7日技术资讯洞察:下一代数据库融合、AI基础设施竞赛与异步编程实战
开发语言·前端·数据库·人工智能·python