Skip to content
Berktug Berke Ates
Berktug Berke Ates

软件工程师

博客

面向产品 API 的缓存策略

· 8 分钟阅读

缓存首先是正确性决策,其次才是性能优化。

命名新鲜度契约

在选择 Redis、CDN 规则或 HTTP 头之前,决定响应可陈旧到什么程度,以及出错时会发生什么。个人资料页、库存计数、价格与权限对延迟的容忍度不同。单一全局 TTL 通常是产品错误。

用客户端可依赖的工程语言写出契约:绝对过期、事件驱动失效或显式再验证。模糊的新鲜度会制造互相争斗的重复缓存层。

缓存在受众所在之处

公开内容受益于边缘缓存。按用户的仪表盘常需以身份与租户为键的应用级缓存。昂贵的聚合计算可能需要物化,而非短命键值条目。

避免缓存未授权响应或嵌入密钥的响应。缓存键必须包含每个改变含义的维度:语言环境、套餐、功能开关与表示版本。

  • 在过期时防止惊群
  • 优先幂等的重计算路径
  • 同时观察命中率与错误数据事故
  • 在有意义的领域事件上失效

失效是难点

基于时间的过期简单,对协作数据往往错误。基于事件的失效精确,却容易漏掉某个生产者。许多系统对关键实体结合适中 TTL 与写路径上的显式清除。

设计删除与更新流,发出缓存所需信号。若写方不知读方缓存,陈旧数据会成为反复事故主题。

衡量用户可见结果

高命中率伴随关于过时信息的支持工单上升,不是胜利。一并跟踪延迟百分位、源站负载与正确性投诉。缓存策略应让产品同时感觉快速与可信。

最好的缓存是看不见的:用户及时得到答案,源站保持平静,工程师能精确解释数据何时允许滞后。


由 Berktug Berke Ates 于 2025年6月18日 发布。