【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. 集群(分片 + 扩展)
相关推荐
2401_89491553几秒前
Geo 优化源码部署实战:环境配置、参数调优完整指南
运维·服务器·数据库·tcp/ip·安全
肠畔码农4 分钟前
Redis 主从复制内核深潜:从物理模型到全量增量同步的本质
网络·redis·php
FfHUCisI16 分钟前
Golang database/sql 标准库基础
数据库·sql·golang
zhanghaha131436 分钟前
Python进阶教程:13_math 模块 —— 新手完全指南
数据库·python·机器学习
__zRainy__42 分钟前
Node系列 · 数据库:单表查询
数据库·后端·mysql·node.js
xcLeigh1 小时前
聊聊数据库迁移工具怎么从单机走向“云+端+服务”,KDMS架构拆解
数据库·架构·数据库迁移·kes·kdms·架构拆解
St_rive1 小时前
selenium cookie的处理
数据库·selenium·测试工具
辻弋2012 小时前
一键优化电源计划、游戏模式、独显强制、禁用后台录制——DeltaForceBooster专治三角洲行动卡顿掉帧,所有改动可一键还原
服务器·数据库·windows·游戏·电脑·php
Wang's Blog2 小时前
PostgreSQL笔记51: 基于 pgvector 构建企业级智能问答系统
数据库·笔记·postgresql
我星期八休息3 小时前
Linux—五种IO模型与非阻塞IO
linux·运维·服务器·网络·数据库·网络协议