【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. 集群(分片 + 扩展)
相关推荐
WL_Aurora3 分钟前
MySQL 5 卸载到 MySQL 8 安装完整指南(不踩坑版)
数据库·mysql
灰阳阳5 分钟前
MySQL的基本架构
数据库·mysql·架构
AI进化营-智能译站23 分钟前
ROS2 C++开发系列08-传感器数据缓存与指令解析方式之数组、向量与字符串实战
开发语言·c++·缓存·ai
@小柯555m24 分钟前
MySql(高级操作符--Where in 和Not in)
数据库·sql·mysql
许彰午25 分钟前
CacheSQL(一):手写数据库的工程化重生
java·数据库·缓存
MmeD UCIZ26 分钟前
MySQL单表存多大的数据量比较合适
数据库·mysql
SarL EMEN1 小时前
mysql之联合索引
数据库·mysql
l1t1 小时前
DeepSeek总结的DuckDB anofox-forecast季节调整时间序列预测插件功能
开发语言·数据库
meta INGU1 小时前
mysql数据被误删的恢复方案
数据库·mysql
27669582921 小时前
acw_sc__v2
数据库·acw_sc__v2·acw_sc__v2逆向·acw_sc__v2算法分析·acw_sc__v2分析·acw_sc__v2还原·acw_sc__v2-ck