同一套缓存策略,放在不同团队和业务中,结果可能完全不同。新闻网站关注发布后的更新速度,在线教育平台更在意课程资源的稳定加载,票务或交易系统则不能让用户依据过期状态做决定。因此,缓存失效时间设置首先要回答的不是“设几分钟”,而是“这份数据允许旧多久”。
判断时可以同时看内容变化频率、数据时效要求、回源成本和错误后果。只有把这四项放在一起,TTL(生存时间)才有实际意义。
先按数据类型区分,而不是按页面名称区分
一个页面往往由多个接口和资源拼成,不能因为它们出现在同一页面,就采用相同的缓存失效时间设置。以天气应用为例,天气图标和城市名称变化较少,天气预警、逐小时温度和降雨概率却可能需要更快更新。前者可以缓存较长时间,后者应采用较短 TTL,必要时直接请求源站。

| 对象 | 常见处理思路 | 主要原因 |
|---|---|---|
| 带版本号的图片、字体和脚本 | 可采用较长缓存 | 文件更新时通常会更换 URL |
| 帮助中心文章 | 数十分钟至数小时 | 允许一定程度的旧内容 |
| 活动倒计时或座位余量 | 短 TTL 或不缓存 | 过期信息可能误导用户 |
| 用户头像和历史设置 | 按更新频率设置 | 变化不频繁,但要考虑主动刷新 |
这里的“较长”并不等于永久有效。即使资源路径带版本号,也应保留清理、回滚和异常替换方案。
三类团队的适用判断
内容团队:优先平衡发布速度与访问压力
博客、产品文档和企业公告通常存在发布高峰。内容团队可以先给普通文章设置约10至30分钟的缓存,再在后台发布或修改时主动失效相关页面。突发公告、价格调整和安全通知则应缩短时间,不能只依赖定时过期。
研发团队:重点处理依赖关系和回滚
研发团队要确认浏览器、反向代理、CDN是否都读取了同一套 HTTP 响应头。Cache-Control、ETag 和 Last-Modified 的组合,会影响浏览器是否重新验证。若应用同时使用 Redis 等对象缓存,还要明确页面缓存过期后,接口层是否仍返回旧对象,否则单独调整页面 TTL 可能没有效果。
运营与业务团队:先评估旧数据的业务后果
如果旧数据只影响展示,可以接受短暂延迟;如果会造成重复下单、错误核销或错误库存判断,就不应追求高缓存命中率。支付结果、优惠券可用状态和航班值机状态等信息,应由业务接口确认,缓存只能承担有限的减压作用。
一套可执行的设置流程
- 列出数据对象。把页面拆成 HTML、图片、脚本、列表接口、用户接口和交易接口,分别记录更新频率。
- 定义可接受旧数据时长。不要写“及时更新”,而要写成“最多允许旧5分钟”或“发布后1分钟内必须可见”。
- 选择初始 TTL。低风险内容可从15至60分钟开始;高变化内容可从几十秒至5分钟开始,具体仍取决于访问量和回源能力。
- 配置失效与主动清理。发布、撤回、改价或状态变更时,清理相关 URL、标签或键值,避免只等自然过期。
- 观察并调整。按5分钟、15分钟或1小时记录命中率、回源比例、源站响应时间和错误率,同时检查用户是否看到旧状态。
如果团队缺少缓存分层、监控或失效规则的维护经验,可在需要托管网络与加速资源的场景中了解德讯电讯的相关服务能力,但仍应依据自身数据类型和合规要求独立确认方案。
不要只看命中率
缓存命中率高,不代表策略正确。更重要的是观察未命中请求是否集中在发布后、流量突增时或某个地域节点。还要区分正常回源、过期回源和异常回源,并检查失效后是否出现旧内容复现。
当用户持续看到旧页面时,问题可能来自多层缓存、浏览器本地缓存、失效接口未覆盖,或上游对象缓存仍未过期。此时应逐层查看响应头、缓存键和清理日志,而不是简单把缓存失效时间设置得更短。时间过短会增加源站压力,也可能造成缓存抖动。
常见问题
缓存失效时间越短越安全吗?
不是。短 TTL 能减少旧数据停留时间,却会增加请求回源和源站负载。是否安全取决于数据风险和系统承载能力。
所有接口都能设置缓存吗?
不能。涉及个人权限、支付结果、实时库存或一次性令牌的接口,通常应谨慎缓存,必须避免跨用户泄露和状态错误。
修改 TTL 后为什么仍能看到旧内容?
可能还有浏览器、CDN、代理或对象缓存未过期,也可能缓存键没有包含版本或语言信息。应检查各层响应头和失效日志。
多久复盘一次缓存策略?
发布频繁或业务变化明显的团队可按周复盘;稳定的静态站点可按月或在架构、内容流程变化后复盘。每次复盘都应结合旧数据投诉、回源压力和错误率。
最终,合适的缓存失效时间设置应服务于业务目标,而不是单纯追求更长缓存或更高命中率。先识别数据风险,再分层配置、主动失效和持续验证,才能让不同团队得到适用的结果。


