news 2026/2/23 17:37:27

面试官:只会 Redis?高并发下你的缓存架构怎么设计到极致?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
面试官:只会 Redis?高并发下你的缓存架构怎么设计到极致?

面试官抛出这个问题时,其实是在考察你是否只停留在“会用 Redis”,而是真正理解高并发场景下缓存体系的工程化设计——包括性能边界、热点防护、一致性取舍、高可用、成本等多个维度的权衡。

下面给出一个目前(2026年)互联网中大型/超大型系统里比较主流且能打到“极致”的缓存架构思路,从分层到细节逐步展开。你可以按这个框架去回答,基本能cover 90%+ 的追问点。

1. 整体架构分层(主流极致方案:三级/四级缓存)

客户端 → CDN(静态 + 部分动态边缘缓存) ↓ Nginx / API Gateway(L1 本地缓存 + Lua 热点防护) ↓ 应用层(L2 本地缓存:Caffeine / Guava Cache / EHCache) ↓ Redis 集群(L3 分布式缓存:Cluster / 多主分片 + Proxy) ↓ DB(MySQL / PolarDB / TiDB) + 最终一致性兜底
  • L0:CDN / 边缘缓存(图片、JS、HTML 片段、甚至部分 JSON 接口结果)
  • L1:Nginx 层本地缓存(openresty + shared dict / lua-resty-cache)或进程内缓存
  • L2:应用 JVM 内本地缓存(Caffeine 目前最主流)
  • L3:Redis(分布式共享缓存)

为什么多级而不是只用 Redis?
单机 Redis 再强(单线程模型下 IO 多路复用)也很难稳定超过 20–30w QPS(考虑大 value、热点、网络抖动后更低)。多级能把 80–95% 的请求挡在本地,Redis 只承接 5–20% 的穿透流量。

2. 读链路(Cache Aside + 多级 + 防穿透/击穿)

  1. 先查L2 本地缓存(Caffeine,expire + refreshAfterWrite)
  2. miss → 查L3 Redis
  3. miss → 查 DB → 回写 Redis → 回写本地缓存
  4. 热点防护(防止击穿/雪崩):
    • 本地缓存层面:Caffeine loadingCache + 同步加载(只让一个线程去加载,其他线程等待)
    • Redis 层面:setnx + 随机过期时间 + 热点 key 提前预热(或用分布式锁 + 看门狗)
    • 极端热点:Nginx 层 shared dict 做二级本地缓存一致性 hash 路由 + 本地缓存(但要配合熔断)

3. 写链路 & 一致性(最常被追问)

主流取舍(2025–2026 年大厂真实偏好):

一致性要求推荐方案延迟复杂度适用场景
最终一致性(主流)Cache-Aside +先写 DB → 延迟双删商品详情、用户资料、推荐
强一致性先删缓存 → 写 DB → 读 DB 回写缓存库存、余额、积分
极致高并发 + 可接受短暂不一致只删不写+ 本地缓存短 TTL + Redis 异步更新极低秒杀读多写少、排行榜
最高一致性Canal / Maxwell / Debezium监听 binlog → 推送到 Redis金融、对账、核心配置

延迟双删最常见写法(伪代码)

@TransactionalpublicvoidupdateProduct(Productproduct){// 1. 先写 DBproductMapper.update(product);// 2. 立即删 Redis(防读到旧值)redis.delete("product:"+product.getId());// 3. 延迟 100–500ms 再删一次(防读-写-读并发场景下的脏数据)ThreadPool.execute(()->{Thread.sleep(200);redis.delete("product:"+product.getId());});}

本地缓存一致性(Caffeine + Redis):

  • Redis 发Pub/SubStream广播失效事件
  • 各节点订阅后删除本地缓存(最主流方案)
  • 或者用短 TTL + 主动刷新(牺牲一点命中率换简单)

4. 热点 & 大 key & 拆分 & 限流(极致高并发的护城河)

  • 热点 key:提前识别(大促前埋点 / Redis 热点检测 / 客户端上报)→ 打散多副本(多 key + 随机后缀)或用本地缓存 + 一致性 hash 路由
  • 大 key:拆(Hash/List/Set 分片)、懒删除、scan + hdel
  • Redis 自身防护
    • proxy 层(Twemproxy / Codis / Redis-Cluster Proxy / 自研)
    • 慢查询监控 + 大 key 拆分 + 内存淘汰策略(allkeys-lru / volatile-lfu)
    • 主从 + 哨兵 / Cluster + 多副本读写分离
  • 应用层限流:令牌桶 / 漏桶 + Sentinel / Resilience4j 熔断 + 降级读 DB / 读本地快照

5. 高可用 & 容灾(别只说主从)

  • Redis Cluster(16384 slot) + 多 master + replica ≥ 2
  • 多机房 / 多地域读写分离(主写从读 + Proxy 智能路由)
  • 缓存穿透兜底:布隆过滤器(Redis bitmap / 本地 long[])
  • 雪崩防护:随机过期 + 过期时间打散+预热+熔断降级(读本地 / 读降级数据源)
  • 冷启动:异步预热(MQ + 定时任务)或热点数据持久化(RDB + AOF 混合)

6. 监控 & 观测(面试官很爱问)

  • 核心指标:命中率(分层分别看)、QPS、延迟 p99、慢查询、淘汰 key 数、内存碎片率、连接数
  • 热点探测:Redis 慢查询 + INFO commandstats + 客户端上报
  • 报警:命中率 < 85%、延迟突增、内存使用率 > 80%、大 key 出现

一句话总结回答框架:

我不会只用单机 Redis,而是采用 CDN + Nginx/OpenResty + Caffeine本地缓存 + Redis Cluster 多级缓存架构
读走就近原则(本地 > Redis > DB),写采用先写 DB + 延迟双删 + Pub/Sub 广播本地失效保证最终一致性。
热点通过提前预热 + 打散多副本 + 本地缓存防护,Redis 本身做Cluster + Proxy + 慢查询监控 + 大 key 拆分,整体能稳定支撑单接口百万 QPS级别并发,同时保持99.99% 可用性。”

你现在可以根据项目实际情况补充具体数字、技术选型和踩坑经验,基本就能把面试官问懵~

你项目里目前做到哪一层了?或者最头疼的是哪个点(热点、一致性、成本)?可以继续聊。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/21 20:43:48

有哪些搭建agent的框架是必须掌握的?

2026 年初&#xff08;当前时间点&#xff09;&#xff0c;AI Agent 开发框架已经高度成熟&#xff0c;“必须掌握” 的程度取决于你的定位&#xff1a; 想进大厂 / AI 工程方向 / 做生产级 Agent 系统 → 至少精通 2–3 个主流框架做 side project / 快速原型 / 研究方向 → …

作者头像 李华
网站建设 2026/2/20 23:55:33

学Simulink--控制执行场景实例:基于Simulink的智能车辆电子稳定控制(ESC)仿真

目录 手把手教你学Simulink 一、引言:为什么“智能汽车需要ESC”? 二、ESC 系统架构总览 输入(驾驶员 + 环境): 输出(控制指令): 三、关键原理:理想横摆角速度模型 四、车辆动力学模型(含轮胎非线性) 侧向力: 侧偏角: 运动方程: 五、ESC 控制器设计:滑…

作者头像 李华
网站建设 2026/2/18 17:38:46

AI驱动的指纹浏览器风控对抗:中屹动态指纹自适应与行为拟真技术实现

随着各大平台风控系统引入 LSTM 时序分析、GBDT 聚类算法与多模态特征识别技术&#xff0c;传统静态指纹方案因特征固化、行为机械、抗检测能力弱等问题&#xff0c;被风控系统识别的准确率已超过 98%。中屹指纹浏览器基于生成式对抗网络&#xff08;GAN&#xff09;与强化学习…

作者头像 李华
网站建设 2026/2/6 10:05:40

Nodejs+vue中学生社团管理系统小程序

文章目录 项目背景技术架构核心功能创新点应用价值 --nodejs技术栈--结论源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01; 项目背景 学生社团管理系统小程序旨在解决高校或中学社团管理中的信息分散、活动组织低效、成员沟通不畅等问题…

作者头像 李华
网站建设 2026/2/14 15:21:46

argocd 命令使用详解

一份详细的 ArgoCD CLI 命令使用指南&#xff0c;按「基础准备→核心命令&#xff08;按使用场景分类&#xff09;→高级用法→实用技巧」的结构整理&#xff0c;覆盖日常运维90%以上的场景&#xff0c;新手也能快速上手。 一、前置准备 1. 安装 ArgoCD CLI 方式1&#xff1…

作者头像 李华