Redis 主从复制 + 缓存
一、Redis 主从复制
- 是什么?
主从复制是 Redis 高可用、读写分离的核心机制:
- 一台 主节点(Master):负责写操作
- 多台 从节点(Slave):负责读操作,数据实时同步主节点
- 主节点数据变更 → 自动同步到所有从节点
-
核心作用
1). 读写分离:主写、从读,大幅提升 Redis 并发读取能力
2). 数据备份:从节点是主节点的实时副本
3). 高可用基础:主节点挂了,从节点可以自动 / 手动升级为主(配合哨兵)
4). 故障恢复:避免单点故障 -
主从复制原理
1)连接建立阶段
从节点启动后,向主节点发送 SYNC / PSYNC 命令,请求复制。
2)全量复制(第一次同步必走) -
主节点执行 BGSAVE,生成RDB 快照文件
-
主节点把 RDB 发给从节点
-
从节点清空自身数据,加载 RDB
-
主节点将生成 RDB 期间的新增写命令缓存起来,发给从节点
-
从节点执行缓存命令,完成全量同步
3)增量复制(日常同步)
全量同步完成后,主节点每执行一个写命令,就实时发送给从节点,从节点执行命令保持一致。
4)心跳机制
- 主节点每秒发送 PING
- 从节点回复 PONG 保证连接正常,断线重连后可继续增量复制(Redis 2.8+)
- 主从复制特点
- 异步复制:主节点写完立即返回,不等待从节点同步完成
- 一个主可以对应多个从
- 从节点只能读,不能写(默认配置)
- 从节点可以挂从节点(链式复制)
- 常见问题
- 全量复制开销大 解决方案:控制主节点内存大小(建议不超过 10G),避免频繁全量同步
- 从节点延迟 网络波动、从节点负载高都会导致延迟,可监控 master_repl_offset
- 脑裂 主节点网络闪断,从节点被哨兵升级为主 → 网络恢复后双主 解决方案:配置 min-replicas-to-write 1 强制至少 1 个从节点同步才允许写入
二、Redis 缓存(Cache)详解
Redis 最核心用途就是高性能分布式缓存,用来扛高并发、减轻数据库压力。
1). 缓存是什么?
缓存 = 把高频访问、低频修改的数据存放在高速介质(内存)
- 数据库:慢(磁盘)
- Redis:快(内存,10w+ QPS)
用户请求 → 先查 Redis → 命中直接返回 → 不命中查数据库 → 回写到 Redis
2). 缓存的核心价值
- 超高并发承载
- 超低响应延迟(微秒级)
- 保护数据库,防止被打垮
- 大幅提升系统吞吐量
- 缓存使用流程
请求 → 查 Redis
├── 命中 → 直接返回数据(最快)
└── 未命中 → 查询数据库 → 将数据写入 Redis → 返回数据 - 缓存的三种经典使用模式
(1)Cache Aside Pattern(旁路缓存,最常用)
- 读:先读缓存,不读库,写回缓存
- 写:先更新数据库,再删除缓存 企业 99% 使用这种模式。
2)Read/Write Through(穿透缓存)
业务不直接操作缓存,由数据库驱动同步缓存,代码简单,但性能一般。
3)Write Back(写回)
写缓存 → 异步批量写库 性能极高,但数据有丢失风险,不适合金融 / 订单。
三、缓存三大经典问题 + 解决方案
1). 缓存穿透
现象
大量请求查询不存在的数据,缓存永远不命中,全部打到数据库。 例:查询 id = -1 的用户。
解决方案
- 缓存空值 查不到数据时,把 null 存入缓存,设置短过期时间(30s~5min)
- 布隆过滤器(Bloom Filter) 提前把合法 ID 存入布隆过滤器,请求先过过滤器,不存在直接拒绝
- 参数校验、黑名单拦截
2). 缓存击穿
现象
一个极高并发的 Key 过期了,瞬间所有请求打到数据库。 例:热门商品详情缓存过期。
解决方案
- 设置热点数据永不过期
- 加互斥锁(Mutex Lock) 只允许一个线程去查库并重建缓存
- 异步定时刷新缓存
3). 缓存雪崩
现象
大量 Key 同一时间集体过期 或 Redis 宕机,所有请求打库 → 数据库崩溃。
解决方案
- 过期时间随机化expire = 基础时间 + 随机秒数,避免集体过期
- Redis 高可用(主从 + 哨兵 / 集群)
- 多级缓存(本地缓存 Caffeine + Redis)
- 限流、降级、熔断
- 缓存预热
四、缓存与数据库一致性
正确方案:先更新数据库,再删除缓存
为什么不是更新缓存?
- 缓存可能不会被访问,浪费性能
- 并发写会导致脏数据
五、主从复制 + 缓存组合
客户端 → Nginx → 服务 → Redis 集群(主从复制)→ 数据库
- 主节点负责写缓存(修改数据)
- 从节点负责读缓存(查询数据)
- 读写分离,主从分担压力
- 从节点挂了不影响写入,主节点挂了哨兵自动切换从升主
- 缓存 + 主从 = 高性能 + 高可用
六、核心总结
主从复制
- 主写从读,读写分离
- 全量复制(首次)+ 增量复制(日常)
- 异步复制,有延迟
- 高可用基础,配合哨兵实现自动故障转移
缓存 - 旁路缓存模式最常用:先读缓存,不命中读库,写回缓存
- 写策略:先更库,再删缓存
- 三大问题:穿透(空值 / 布隆)、击穿(锁 / 永不过期)、雪崩(随机过期 / 集群)
- 目标:扛高并发、减库压力、低延迟

浙公网安备 33010602011771号