B13 · 快取策略 詳細 ROADMAP

計畫文件,不會被 Quartz 渲染。 回主 roadmap → backend/ROADMAP.md


章節目標

快取是後端效能救星,也是最多坑的地方。本章涵蓋快取層次 / patterns / 失效策略 / 熱點 key / 雪崩。Micro-service 系列有多篇實戰(33-cache-correct-usage、34-cache-antipatterns、27-queue-redis-coldstart),本章整合並擴展。


🌱 基本介紹

#主題SlugStage大綱
01快取是什麼01-what-is-cache🌱時間 / 空間 trade-off、從 CPU cache 到 CDN 的光譜

❓ 為什麼需要

#主題SlugStage大綱
02為什麼「加 cache」常常讓事情更糟02-why-cache-makes-it-worse🌱資料不一致、cache stampede、cache miss 比無 cache 更慢、debugging 複雜度
03為什麼 cache invalidation 是 CS 兩大難題之一03-why-cache-invalidation-hard🌱Phil Karlton 名言、TTL / event / tag 各自盲區、多層 cache 級聯失效

🕰️ 演進

#主題SlugStage大綱
04快取技術演進04-cache-evolution🌱Memcached(2003)→ Redis(2009)→ Redis Cluster / Sentinel → DragonflyDB / KeyDB(2022+)

🧠 知識型

F13-A 層次與定位

#主題SlugStage大綱
05快取層次05-cache-layers🌱CPU cache → Process memory → Redis → CDN 各層特性
06Redis / Memcached⛔️ micro-service/20-storage-redis-es🌿跨系列
07Redis 資料結構07-redis-data-structures🌱String / Hash / List / Set / Sorted Set / Stream / Bitmap / HyperLogLog;用對能少寫很多 code
08Redis 持久化(RDB / AOF)08-redis-persistence🌱RDB 快照 vs AOF 日誌;trade-off;混合模式
09Redis Cluster / Sentinel09-redis-ha🌱Sentinel 單 master 高可用 vs Cluster 分 slot;什麼時候升級

F13-B Cache Patterns

#主題SlugStage大綱
10Cache-Aside / Read-Through / Write-Through / Write-Behind10-cache-patterns🌱四種主流模式的 trade-off、適用場景
11Refresh-Ahead11-refresh-ahead🌱即將過期時背景刷新、避免 spike;複雜度高時機
12Cache 正確用法⛔️ micro-service/33-cache-correct-usage🌿跨系列

F13-C Invalidation

#主題SlugStage大綱
13TTL 策略13-ttl-strategy🌱固定 TTL / 隨機 TTL 避 avalanche / 基於業務的動態 TTL
14Event-driven Invalidation14-event-invalidation🌱DB 更新 → 發 event → cache 失效;跟 Queue 整合
15Tag-based Invalidation15-tag-invalidation🌱一組 key 的批次失效;Redis 沒有內建,怎麼實作
16Versioned Key16-versioned-key🌱user:123:v2,不刪舊 key、靠 version 切換

F13-D 災難模式

#主題SlugStage大綱
17Cache Stampede(雪崩)17-cache-stampede🌱熱點 key 同時過期 → 大量 request 打 DB;locking / singleflight / 隨機 TTL 解法
18Hot Key 問題18-hot-key🌱單 key 過熱、Redis 單 thread 瓶頸;解法:本地 cache / replica read / key split
19Cache Penetration(穿透)19-cache-penetration🌱查不存在的 key 每次打 DB;bloom filter / 空值快取
20Cache Anti-patterns⛔️ micro-service/34-cache-antipatterns🌿跨系列

F13-E 多層 Cache

#主題SlugStage大綱
21L1(本地記憶體)+ L2(Redis)21-multi-level-cache🌱Caffeine / node-cache / lru-cache 當 L1,Redis 當 L2;一致性策略
22CDN 作為最外層 Cache22-cdn-caching🌱Cache-Control / ETag / Surrogate-Control;跟 app cache 的分工

🔧 小實作注意事項

#主題SlugStage大綱
23設計 CacheService 抽象層(proto 對照)23-design-cache-service🌱可切換 backend(Redis / Memcached / in-memory)、enabled toggle、命名 convention;proto core/cache.py 案例
24Cache hit rate 監控24-cache-metrics🌱hit / miss / eviction、Prometheus metrics、低 hit rate 的原因分析

💣 Anti-pattern

#主題SlugStage大綱
25快取 Anti-patterns25-cache-antipatterns🌱每個查詢都 cache(連查一次的都 cache)、TTL 訂無限大、cache 放敏感資料沒加密、不監控 hit rate、DB 跟 cache 沒一致性策略、忽視 cold start

🧰 對應檢查工具

#主題SlugStage大綱
26快取相關工具26-cache-tooling🌱redis-cli、RedisInsight、Prometheus redis_exporter、MONITOR 指令、SLOWLOG

📎 補充

#主題SlugStage大綱
S01DragonflyDB / KeyDB(Redis 替代)s01-redis-alternatives🌱多執行緒版 Redis、效能、遷移成本
S02Materialized View 作為 caches02-materialized-view🌱DB 層 cache;refresh 策略

章節進度統計

  • 知識主題:26 + 2 補充 = 28 項
  • 🌿 growing:3(跨系列)
  • 🌱 seed:25

跨系列連結

  • micro-service/20、33、34、27
  • backend/database/ B03(DB 層 cache / materialized view)
  • backend/conventions/ B07 #9 CacheService
  • backend/observability/ B17(cache metrics)
  • backend/stress-testing/ B19(cache 壓測案例)