Cache Aside(旁路缓存)
最常用模式:
读: cache → miss → DB → set cache
写: update DB → delete cache
为何 删缓存而非更新:避免并发写乱序;双写不一致复杂。
延迟双删
delete cache
update DB
sleep(500ms) // 覆盖读请求旧数据写回
delete cache again
sleep 时间需压测;或用 Canal 订阅 binlog 异步删。
穿透 / 击穿 / 雪崩
| 问题 | 原因 | 方案 | |------|------|------| | 穿透 | 恶意不存在 id | Bloom、空对象 TTL | | 击穿 | 热 key 过期 | 互斥锁重建、逻辑过期 | | 雪崩 | 同时过期/宕机 | TTL jitter、多级缓存、熔断 |
互斥锁重建:仅一个线程查 DB 回填,其余等待或短暂降级。
一致性级别
强一致:写穿 Write Through、写回 Write Back(复杂)。互联网多为 最终一致,业务容忍秒级。
先删后写 vs 先写后删:主流 先写 DB 再删 cache;删失败需重试队列。
本地缓存 + Redis
Caffeine 本地 + Redis 二级;注意本地过期与广播失效(Pub/Sub)。
与站内内容
/zh/knowledge/backend-interview/redis-cache-strategy 有扩展阅读。MySQL 事务保证源数据正确,Redis 是加速层。
面试系统设计
估算缓存命中率、内存容量(key 大小 × 数量)、eviction allkeys-lru。大 value 拆分 Hash field。
实战巩固与面试表达
本篇属于 8 周冲刺 week06-cache-patterns 主题。复习时先闭卷回答 frontmatter 中三张 flashcard,再展开口述两个「为什么」:为什么这种方案能 work、边界失败时如何降级。与相邻章节对照:算法篇强调复杂度与模板,Go 篇强调工程默认写法,中间件篇强调线上故障案例。
动手与自检清单
用 25 分钟限时做 1 道相关练习题或画出一张架构/数据结构示意图;用 5 分钟写 STAR 片段说明你在项目里是否用过类似技术。记录 3 个面试追问及你的标准答法,存入 /zh/notebook/master-plan 笔记。若某点不熟,回到对应 /chapters 交互 Lab 重新走一遍流程,比死记卡片更有效。
易错点提醒
避免只背名词不会画图;避免只说优点不谈 trade-off(性能、一致性、运维成本至少提一项);避免把学习 Demo 说成百万 QPS 生产。回答时使用「场景 → 方案 → 结果 → 反思」四段式,体现工程成熟度。
自检
口述秒杀场景:库存 Redis 预减 + DB 异步扣减 + 限流。下一篇:week06-redis-persistence-cluster。