CalcGuide · 技术博客主页 / 一页纸学习计划
🟠

缓存体系与数据层选型

分类:工程技术 · 路径:docs/topics/caching-and-data-layer/README.md

#system-design#cache#redis#cdn#storage#database

用 5 种缓存写策略、Redis/Memcached、CDN、关系/文档/列存/时序/向量/对象存储选型搭好读写路径

父主题

系统设计:从容量估算到一致性与可观测

子主题(0)

缓存体系与数据层选型

0. 元信息

1. 学习路线

缓存体系总览(CDN / 反向代理 / 进程内 / 分布式)
  → 缓存写策略五件套(Cache-Aside / Read-Through / Write-Behind / Write-Through / Bypass)
  → 缓存失效三件套(雪崩 / 击穿 / 穿透 / 热 key)
  → Redis 进阶(Lua / Stream / Cluster / Pub-Sub / Pipeline)
  → Memcached 与 Redis 的取舍
  → 关系数据库(MySQL / PostgreSQL / TiDB / CockroachDB / Aurora)
  → 文档数据库(MongoDB / FerretDB)
  → 列存与时序(ClickHouse / Cassandra / ScyllaDB / InfluxDB / TimescaleDB)
  → 向量数据库(Milvus / Weaviate / pgvector)
  → 对象存储与生命周期(S3 / OSS / MinIO + Glacier / 归档)
  → 冷热分层与归档

每一步都跑基准、写失效演练。

2. 阶段周数分配

精简子主题不固定周数。按 §3 顺序完成。

3. 九阶段表

阶段核心知识实践产出学会标准
1缓存体系总览缓存分层图能讲清 CDN / 反向代理 / 进程内 / 分布式 的边界
25 种写策略5 个可运行示例能为「读多写少」「写多读多」选对策略
3缓存失效三件套雪崩 / 击穿 / 穿透 演练能复现 + 解释 + 防护
4Redis 进阶Lua 限流 + Stream 队列理解 Lua 原子性、Stream 消息回溯
5Memcached vs Redis基准对比报告知道什么时候用 Memcached
6关系数据库选型MySQL / TiDB 对比知道何时分库分表 / 何时上分布式
7文档 / 列存 / 时序Mongo / ClickHouse / InfluxDB能解释业务匹配
8向量 / 对象存储Milvus + S3能解释 RAG 与冷归档
9冷热分层自动迁移策略写一份数据生命周期表

4. 第一周任务

精简版省略固定日程。先完成阶段 1~3:缓存体系总览 + 5 种写策略 + 失效演练。

5. 阶段通用验收

精简版省略;每个产出保留基准报告、命中/失效日志、版本。

6. 最终验收

精简版省略;以 §3 第 9 阶段和 §9.4 问题口述检查为准。

7. 综合项目

精简版省略;成果并入父主题百万 QPS 短链项目(5 种缓存模式 + 雪崩/击穿/穿透演练)。

本主题贡献

交付物清单

  1. cache/5_strategies.md:5 种写策略各 1 个端到端示例(短链 read / write),含伪代码 + 数据流图 + 失效路径;
  2. cache/failover/*.md:雪崩 / 击穿 / 穿透各 1 份演练报告,含复现脚本、QPS 跌停曲线、TTL 抖动 / singleflight / Bloom 的修复证据;
  3. bench/redis_vs_memcached.md:同 key size、同 QPS、同机器下两个工具的 P50 / P95 / P99 + 内存占用对照;
  4. bench/storage_matrix.md:MySQL / TiDB / ClickHouse / InfluxDB / Milvus 各跑 1 个查询特性(短链跳转 / 秒级跳转 OLAP / 分钟级 metrics / 100 维向量检索),附 pgvectorMilvus 的向量检索对照。

验收标准

8. 推荐资料

精简版省略;使用 §9.3 和 §9.6 Source。

9. 学习资料汇聚(v0.3 自包含)

9.1 背景与动机

缓存几乎是性能优化的第一反应。1990 年代中期 Memcached 把内存 hash 表抽成网络服务;2009 年 Redis 用单线程 + 多数据结构 + Lua 改写了「分布式缓存」;2010 年代 CDN 把「地理缓存」变成互联网的基础设施。今天几乎所有大流量系统都至少 3 层缓存:CDN / 反向代理 / 进程内 / 分布式。学会选对缓存、写对失效,远比加机器重要。

数据层这边,2000 年代 MySQL 是默认答案;2010 年代 NoSQL 浪潮带来 MongoDB、Cassandra、HBase;2015 年后 NewSQL(TiDB / CockroachDB / Spanner)补齐「分布式 + SQL」;2018 年后时序与向量数据库独立成军。选型不是越新越好,是业务读写特征 + 一致性 + 成本的三元匹配。

9.2 概念地图

flowchart LR
  Client[客户端] --> CDN[CDN 边缘缓存]
  CDN --> Gateway[API 网关]
  Gateway --> Local[进程内缓存 Caffeine/Map]
  Local --> Distributed[分布式缓存 Redis/Memcached]
  Distributed --> DB[数据层]
  DB --> SQL[关系: MySQL/TiDB]
  DB --> Doc[文档: MongoDB]
  DB --> Column[列存: ClickHouse/Cassandra]
  DB --> TS[时序: InfluxDB/TimescaleDB]
  DB --> Vector[向量: Milvus/pgvector]
  DB --> Object[对象: S3/OSS + 生命周期]
  DB -.冷热分层.-> Archive[冷归档 Glacier/OSS 归档]

关系说明:每一层缓存解决「距离近 + 命中率高」;每一层存储解决「类型 + 一致性 + 成本」。缓存与存储共同回答「数据该存在哪里、用什么方式读」。

9.3 基础知识讲解

9.3.1 论文 / 规范

9.3.2 书

9.3.3 博客 / 文档

9.3.4 人物

9.3.5 方法

9.4 经典问题与经典案例

问题为什么重要最简答案
Cache-Aside vs Read-Through业务是否感知缓存Cache-Aside 应用层管;Read-Through 缓存代理
Write-Behind 怎么不丢消息写异步回写有丢失风险Outbox + WAL + 异步重试
雪崩怎么防大量 key 同时失效压垮 DBTTL 抖动 + 后台刷新 + 多级缓存
击穿怎么防热点 key 失效瞬间打 DBsingleflight / 互斥锁 / 永不失效
穿透怎么防查询不存在的数据绕过缓存布隆过滤器 / 空值缓存 / 接口校验
热 key 怎么发现单 key 流量打满一个节点redis-cli --hotkeys / 客户端 hash 拆分
Redis 与 Memcached 怎么选内存数据库取舍选 Memcached 当纯 KV;选 Redis 当需要 Lua / Stream / Pub-Sub
MySQL 与 TiDB 怎么选单库与分布式 SQL 取舍写 QPS < 5k 用 MySQL + 分库分表;写 QPS > 5k 或要 HTAP 选 TiDB
列存 vs 时序ClickHouse vs InfluxDBOLAP 选 ClickHouse;时序指标选 InfluxDB / TimescaleDB
向量数据库选型RAG / 检索增强量小用 pgvector;量大用 Milvus / Weaviate
对象存储生命周期成本控制热 → 温 → 冷 → 归档 自动迁移
CDN 命中率怎么提决定源站压力大文件分片 + 主动预热 + 边缘缓存

9.5 学习难点

9.6 技术标准与接口

9.6.1 Entity

名称版本组织状态 / 可访问性
Redis7.xRedis LabsGA;BSD-3-Clause
Memcached1.6+Dormando维护;BSD-3-Clause
MySQL8.xOracleGA;GPL-2.0
TiDB7.xPingCAPGA;Apache-2.0
ClickHouse23+ClickHouse Inc.GA;Apache-2.0
Cassandra5.xApacheGA;Apache-2.0
ScyllaDB5.xScyllaDBGA;AGPL-3.0(企业版另议)
MongoDB7.xMongoDB Inc.GA;SSPL
InfluxDB2.xInfluxDataGA;MIT
TimescaleDB2.xTimescaleGA;Apache-2.0
Milvus2.xLF AIGA;Apache-2.0
pgvector0.5+社区活跃;PostgreSQL 许可
S3 / OSS / MinIO当前AWS / 阿里云 / 社区GA;各自许可

9.6.2 Scope

9.6.3 Structure

9.6.4 Ecosystem

9.6.5 Depth Tiers

层级能力缓存与数据层主题可观察标准
L0知道存在知道 5 种写策略与多种数据库类型
L1看得懂示例能读 Redis Lua / ShardingSphere 配置
L2能正确调用能写 Cache-Aside + Lua 限流 + 多级缓存
L3能解释与排错能复现雪崩 / 击穿 / 穿透并选对防护
L4能设计与扩展能为新业务选型并设计冷热分层

本计划目标:L3

9.6.6 Source

10. 常见误区

11. 所有知识点分类(统一规则)

  1. 编程语言
  2. 数据结构与算法
  3. 计算机基础
  4. 工程技术
  5. Web 与后端
  6. 前端与客户端
  7. 数据与人工智能
  8. 项目与职业能力
  9. 安全与可靠性

本计划归属:工程技术 主 + 计算机基础 辅。

直接依赖(2)

查看知识图谱