【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. 集群(分片 + 扩展)
相关推荐
海棠蚀omo2 小时前
从零敲开 MySQL 的大门:库与表的基础操作实战(保姆级入门指南)
数据库·mysql
鸽芷咕2 小时前
告别迁移焦虑:KingbaseES如何搞定Oracle复杂的层次查询与伪列?
数据库·oracle
当代红领巾2 小时前
Oracle 中的物理备份
数据库·oracle
007张三丰2 小时前
常用缓存技术全方位解析:从本地缓存到分布式缓存
分布式·缓存
廋到被风吹走2 小时前
【MySql】超时问题分析
java·数据库·mysql
Y001112362 小时前
Day10-MySQL-事物
数据库·sql·mysql
轩情吖2 小时前
MySQL之用户管理
数据库·c++·后端·mysql·权限管理·用户管理
零雲2 小时前
java面试:Spring事务失效的场景有哪些?
java·数据库·面试