D
AI
学习工作台
8 周后端冲刺2026-05-221 分钟阅读

缓存模式与一致性

穿透/击穿/雪崩、Cache Aside 与延迟双删

8周冲刺week6Redis缓存记笔记标记疑惑

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

知识卡片

问题

缓存穿透是什么?如何解决?

点击翻转查看答案

答案

查询不存在的数据,缓存与 DB 均 miss,压垮 DB;布隆过滤器、空值缓存、参数校验。

问题

缓存击穿与雪崩区别?

点击翻转查看答案

答案

击穿:热 key 过期瞬间大量请求打 DB;雪崩:大量 key 同时过期或 Redis 宕机;互斥锁、随机 TTL、集群高可用。

问题

Cache Aside 更新顺序?

点击翻转查看答案

答案

读:miss 读 DB 写缓存;写:先更新 DB 再删缓存(常用),避免先删后写导致脏读窗口。