上一篇
如果你只想做一件事:先把91网的缓存管理做稳(信息量有点大)
如果你现在只能做一件事——把 91 网的缓存管理做稳,那这篇文章就是给你的逐项执行手册。信息量偏大,但我把关键点按优先级、可落地的操作和长期改进分开,帮助你在最短时间内把痛点抹平、把性能和可用性提上去。

为什么先稳缓存?
- 性能立竿见影:缓存命中率上去,后端负载和响应延迟会瞬间下降,用户体验改善明显。
- 成本下降:减少数据库、API 和计算资源调用,直接降低云资源开销。
- 可用性提升:在后端短暂故障时,缓存能提供降级服务,维持用户可用性。
- 扩展性保证:稳定可靠的缓存体系是支撑流量爆发和功能扩展的基础。
先做哪些“立竿见影”的事(短期 1–2 周)
- 全量审计当前缓存现状
- 列出所有缓存层:浏览器、CDN、边缘缓存、应用层缓存(Redis/Memcached)、反向代理(Varnish/Nginx proxy_cache)、DB 缓存/查询缓存。
- 记录每一层的命中率、TTL、失效策略、key 规则、容量、平均响应时延与 P95/P99 指标。
- 静态资源立刻做对
- 对静态资源使用内容指纹(hash)并设置 Cache-Control: public, max-age=31536000, immutable;资源更新走版本化。
- 启用 GZIP/ Brotli 压缩和合理的 Content-Type / Content-Encoding。
- 正确设置 HTTP 缓存头
- 对可缓存的动态响应使用合理的 Cache-Control、ETag/Last-Modified、Vary。区分用户相关(不能缓存)和公共内容。
- CDN 覆盖与配置优化
- 将静态与能够边缘缓存的动态页面交给 CDN,开启边缘缓存规则、压缩与 HTTP/2 或 HTTP/3。
- 使用缓存键包含必要维度(路径 + query 白名单 + cookie 或 header 规则),避免过度碎片化。
- 防止缓存雪崩/击穿的低成本措施
- 对热点 key 加随机 TTL 或 jitter,避免大面积同一时间失效。
- 简单的互斥锁(mutex)或 double-checked locking 实现,避免并发请求同时回源。
中期改进(1–3 个月)
- 统一缓存策略与 key 规范
- 制定缓存命名规范(域名/服务/资源类型/版本/身份维度),并在代码库中强制化工具支持(lint、库封装)。
- 应用层缓存模式:cache-aside 优先
- 读:先查缓存,未命中回源并回写缓存。写:先写 DB,再使缓存失效或更新(视一致性策略)。
- 解决热点、热 key 与大对象问题
- 对大对象拆分、分页缓存或只缓存索引部分;对热点 key 做本地 LRU 缓存或多级缓存(本地 + 分布式)。
- Redis/Memcached 集群优化
- 选择合适 eviction 策略(volatile-lru / allkeys-lru)和内存上限;监控碎片率、慢命令、阻塞事件。
- 做水平分片(hash slot / consistent hashing)或使用托管服务,避免单点内存瓶颈。
- 防止缓存雪崩与雪崩缓解
- 使用 request coalescing(singleflight)、令牌桶限流、熔断降级策略。
- 对关键请求实现“stale-while-revalidate”逻辑:返回陈旧但可用的数据并后台刷新缓存。
长期能力与平台化(3–12 个月)
- 可观测性与告警体系
- 指标:命中率、miss 率、回源流量、平均/95/99 延迟、内存使用、evictions、key TTL 分布。
- 建立基线、SLO/SLA、告警策略(例如:命中率低于 85% 或 evictions 速率异常)。
- 回放与容量规划
- 将生产流量采样并回放到测试集群,做压力测试与容量试验。建立容量预估模型,结合业务峰值计划扩容策略。
- 蓝绿/金丝雀发布缓存规则
- 新的缓存策略或 key 变更先小流量金丝雀验证,确认没有缓存污染或回源暴增再放大。
- 多区域与边缘容灾
- 在多地域部署边缘缓存与分布式 Redis,支持跨区域 failover,减少单区故障影响。
- 安全与一致性
- 防止缓存中毒(cache poisoning):对缓存 key 做严格校验,避免直接把未过滤的请求参数作为 key。对敏感内容使用 signed URLs 或按会话/授权绕过缓存。
- 对强一致性要求的数据采用策略性绕开缓存或采用 write-through/同步更新方案。
常见问题与解决方法速查
- 命中率极低:检查 key 设计是否包含时间戳、session id 或过多维度;检查 TTL 过短或缓存穿透(恶意/异常请求);
- 热点导致后端崩溃:实现锁、singleflight 或本地缓存,并尽快拆分热点;
- 数据不一致:确认写操作是否按设计更新/删除缓存;对最终一致性场景使用短 TTL + 异步刷新;
- 大量 evictions:扩容内存或降低单 key 体积,调整 eviction 策略,分片或限流写入。
衡量成功的指标(短期看,必须监控)
- 总命中率(目标 >= 85% 视业务而定)
- 回源请求率下降(目标显著下降)
- 平均响应时延与 P95/P99 改善
- 后端 CPU/RPS 降低与成本改善
- 缓存相关报警减少
优先级清单(立即到长期)
- 立即:静态资源指纹 + CDN + Cache-Control
- 48 小时内:审计关键缓存层与命中率监控面板
- 1 周内:修复最严重的缓存穿透/热点问题(加锁/TTL jitter)
- 1–3 月:统一 key 规则、构建 cache-aside 库、优化 Redis 集群
- 3–12 月:自动化回放、容量规划、多区域部署与完善告警体系
结尾建议(让执行更容易) 把缓存当成核心产品来对待:建立一套小而可复用的缓存库/中间件,供所有服务使用;把缓存策略写进 PR 流程和回归测试;所有缓存规则变更都必须经过流量金丝雀验证。做到这些,91 网在高并发、复杂业务面前才不会手忙脚乱。
























