Redis 主从复制 + 缓存

一、Redis 主从复制

  1. 是什么?
    主从复制是 Redis 高可用、读写分离的核心机制:
  • 一台 主节点(Master):负责写操作
  • 多台 从节点(Slave):负责读操作,数据实时同步主节点
  • 主节点数据变更 → 自动同步到所有从节点
  1. 核心作用
    1). 读写分离:主写、从读,大幅提升 Redis 并发读取能力
    2). 数据备份:从节点是主节点的实时副本
    3). 高可用基础:主节点挂了,从节点可以自动 / 手动升级为主(配合哨兵)
    4). 故障恢复:避免单点故障

  2. 主从复制原理
    1)连接建立阶段
    从节点启动后,向主节点发送 SYNC / PSYNC 命令,请求复制。
    2)全量复制(第一次同步必走)

  3. 主节点执行 BGSAVE,生成RDB 快照文件

  4. 主节点把 RDB 发给从节点

  5. 从节点清空自身数据,加载 RDB

  6. 主节点将生成 RDB 期间的新增写命令缓存起来,发给从节点

  7. 从节点执行缓存命令,完成全量同步
    3)增量复制(日常同步)
    全量同步完成后,主节点每执行一个写命令,就实时发送给从节点,从节点执行命令保持一致。
    4)心跳机制

  • 主节点每秒发送 PING
  • 从节点回复 PONG 保证连接正常,断线重连后可继续增量复制(Redis 2.8+)
  1. 主从复制特点
  • 异步复制:主节点写完立即返回,不等待从节点同步完成
  • 一个主可以对应多个从
  • 从节点只能读,不能写(默认配置)
  • 从节点可以挂从节点(链式复制)
  1. 常见问题
  2. 全量复制开销大 解决方案:控制主节点内存大小(建议不超过 10G),避免频繁全量同步
  3. 从节点延迟 网络波动、从节点负载高都会导致延迟,可监控 master_repl_offset
  4. 脑裂 主节点网络闪断,从节点被哨兵升级为主 → 网络恢复后双主 解决方案:配置 min-replicas-to-write 1 强制至少 1 个从节点同步才允许写入

二、Redis 缓存(Cache)详解
Redis 最核心用途就是高性能分布式缓存,用来扛高并发、减轻数据库压力。
1). 缓存是什么?
缓存 = 把高频访问、低频修改的数据存放在高速介质(内存)

  • 数据库:慢(磁盘)
  • Redis:快(内存,10w+ QPS)
    用户请求 → 先查 Redis → 命中直接返回 → 不命中查数据库 → 回写到 Redis
    2). 缓存的核心价值
  1. 超高并发承载
  2. 超低响应延迟(微秒级)
  3. 保护数据库,防止被打垮
  4. 大幅提升系统吞吐量
  5. 缓存使用流程
    请求 → 查 Redis
    ├── 命中 → 直接返回数据(最快)
    └── 未命中 → 查询数据库 → 将数据写入 Redis → 返回数据
  6. 缓存的三种经典使用模式
    (1)Cache Aside Pattern(旁路缓存,最常用)
  • 读:先读缓存,不读库,写回缓存
  • 写:先更新数据库,再删除缓存 企业 99% 使用这种模式。
    2)Read/Write Through(穿透缓存)
    业务不直接操作缓存,由数据库驱动同步缓存,代码简单,但性能一般。
    3)Write Back(写回)
    写缓存 → 异步批量写库 性能极高,但数据有丢失风险,不适合金融 / 订单。

三、缓存三大经典问题 + 解决方案
1). 缓存穿透
现象
大量请求查询不存在的数据,缓存永远不命中,全部打到数据库。 例:查询 id = -1 的用户。
解决方案

  1. 缓存空值 查不到数据时,把 null 存入缓存,设置短过期时间(30s~5min)
  2. 布隆过滤器(Bloom Filter) 提前把合法 ID 存入布隆过滤器,请求先过过滤器,不存在直接拒绝
  3. 参数校验、黑名单拦截

2). 缓存击穿
现象
一个极高并发的 Key 过期了,瞬间所有请求打到数据库。 例:热门商品详情缓存过期。
解决方案

  1. 设置热点数据永不过期
  2. 加互斥锁(Mutex Lock) 只允许一个线程去查库并重建缓存
  3. 异步定时刷新缓存

3). 缓存雪崩
现象
大量 Key 同一时间集体过期 或 Redis 宕机,所有请求打库 → 数据库崩溃。
解决方案

  1. 过期时间随机化expire = 基础时间 + 随机秒数,避免集体过期
  2. Redis 高可用(主从 + 哨兵 / 集群)
  3. 多级缓存(本地缓存 Caffeine + Redis)
  4. 限流、降级、熔断
  5. 缓存预热

四、缓存与数据库一致性
正确方案:先更新数据库,再删除缓存
为什么不是更新缓存?

  • 缓存可能不会被访问,浪费性能
  • 并发写会导致脏数据

五、主从复制 + 缓存组合
客户端 → Nginx → 服务 → Redis 集群(主从复制)→ 数据库

  1. 主节点负责写缓存(修改数据)
  2. 从节点负责读缓存(查询数据)
  3. 读写分离,主从分担压力
  4. 从节点挂了不影响写入,主节点挂了哨兵自动切换从升主
  5. 缓存 + 主从 = 高性能 + 高可用

六、核心总结
主从复制

  1. 主写从读,读写分离
  2. 全量复制(首次)+ 增量复制(日常)
  3. 异步复制,有延迟
  4. 高可用基础,配合哨兵实现自动故障转移
    缓存
  5. 旁路缓存模式最常用:先读缓存,不命中读库,写回缓存
  6. 写策略:先更库,再删缓存
  7. 三大问题:穿透(空值 / 布隆)、击穿(锁 / 永不过期)、雪崩(随机过期 / 集群)
  8. 目标:扛高并发、减库压力、低延迟
posted @ 2026-06-05 08:55  modenq  阅读(11)  评论(0)    收藏  举报