惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园 - Franky
WordPress大学
WordPress大学
Hugging Face - Blog
Hugging Face - Blog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
小众软件
小众软件
人人都是产品经理
人人都是产品经理
罗磊的独立博客
博客园 - 聂微东
雷峰网
雷峰网
量子位
美团技术团队
V
V2EX
The GitHub Blog
The GitHub Blog
大猫的无限游戏
大猫的无限游戏
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
IT之家
IT之家
The Cloudflare Blog
爱范儿
爱范儿
T
Tailwind CSS Blog
博客园 - 三生石上(FineUI控件)
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
宝玉的分享
宝玉的分享
Last Week in AI
Last Week in AI
Jina AI
Jina AI

不止平凡

Token 省钱诀窍速查 梁山上的政治 记一次通过ssh密钥无法推送代码问题排查 进程、线程、协程 系统内核和编程接口 操作系统笔记 QQ里的故事 撇开和捺住 追逐与回首 我与文学的缘分 心如明镜台 你真的看懂月光宝盒了吗
Redis学习笔记
知平 · 2025-07-23 · via 不止平凡
By 知平 in 手札

Redis 持久化、主从复制、哨兵、分片集群,每个概念单独来看都很容易理解,但它们之间存在哪些联系?Redis为什么会演化出这几种架构模式?这篇文章告诉你答案。

怎么做数据持久化

1、AOF——子线程将内存数据进行落盘(对数据完整性支持较好)

  • appendfsync always: 主线程同步fsync
  • appendfsync no: 由OS fsync
  • appendfsync everysec: 定期1s执行fsync

AOF 持续变大,恢复时间变长怎么办?

  • 定期rewrite,合并AOF(只需保留最近的状态)

2、RDB定时数据快照(丢失数据不敏感)

  • 持久化文件小(二进制、压缩)
  • 写磁盘频率低

3、混合持久化——综合AOD和RDB

  • 定时快照
  • 2次快照的间隔使用AOF持久化

主从复制

master + 多个 slave 模式

1、master读写,slave只读

2、master 实时同步到slave

3、故障时slave提升为主

哨兵模式

引入观察者角色(哨兵),将slave提升为master的过程自动化。

1、哨兵定期检查master状态

2、master正常应答,继续观测

3、发现master异常,开始发起主从切换

哨兵和master之间网络故障引起误判怎么办?

  • 在多个节点部署多个哨兵
  • 哨兵监测到master异常数量大于阈值,才判定为故障

由哪个哨兵发起切换?

  • 哨兵投票

1个master扛不住怎么办?

分片集群

1、客户端根据key实现路由规则

2、proxy模式

3、官方集群方案

  • 无需部署哨兵,节点之间通过gossip协议相互探测健康切换
  • 官方提供了sdk用于路由规则,节点删除和增加适配
  • 如果老业务升级困难,还可以自己增加一层proxy

总结

总结一下,我们是如何从 0 到 1,再从 1 到 N 构建一个稳定、高性能的 Redis 集群的,从这之中你可以清晰地看到 Redis 架构演进的整个过程。

  1. 数据怕丢失 -> 持久化(RDB/AOF)
  2. 恢复时间久 -> 主从副本(副本随时可切)
  3. 故障手动切换慢 -> 哨兵集群(自动切换)
  4. 读存在压力 -> 扩容副本(读写分离)
  5. 写存在压力/容量瓶颈 -> 分片集群
  6. 分片集群社区方案 -> Twemproxy、Codis(Redis 节点之间无通信,需要部署哨兵,可横向扩容)
  7. 分片集群官方方案 -> Redis Cluster (Redis 节点之间 Gossip 协议,无需部署哨兵,可横向扩容)
  8. 业务侧升级困难 -> Proxy + Redis Cluster(不侵入业务侧)

至此,我们的 Redis 集群才得以长期稳定、高性能的为我们的业务提供服务。