动静分离场景下,缓存过期策略的核心是平衡性能与一致性,强制刷新则是在数据更新时确保用户立即看到最新内容的兜底手段。
动静分离缓存过期策略怎么设置
缓存过期时间设置得合理,能大幅减少回源请求,提升页面加载速度;设置失误则可能导致用户看到旧数据,或服务器压力骤增,以下从静态资源类型、缓存层级和具体配置三个维度拆解。
静态资源缓存过期策略分类
- 图片与视频:这类资源通常稳定不变,建议设置较长过期时间,如30天或更长,通过文件名哈希或版本号实现更新,避免直接修改原文件导致缓存失效。
- CSS与JavaScript:更新频率较高,推荐设置7天至30天,并配合构建工具在文件名中注入版本号或内容哈希,每次发布新版本后,文件名自动变化,相当于强制浏览器更新缓存。
- HTML页面较多,过期时间应设置较短,如几分钟到几小时,或直接不缓存,如果使用服务端渲染,可利用SSR缓存策略单独处理。
- 字体与图标:类似图片,稳定后可设置长过期时间,更新时通过版本号控制。
缓存过期控制的两种主流方式
| 策略 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| 固定TTL | 配置简单,性能开销低 | 更新不及时,需配合版本号 | 极稳定资源(如logo、底图) |
| 版本号/哈希 | 精准控制缓存失效,更新即时生效 | 构建工具集成复杂,URL需变动 | 频繁迭代的JS/CSS文件 |
实操步骤:在Nginx中配置静态资源过期时间,在location块内添加:
location ~ .(jpg|jpeg|png|gif)$ { expires 30d; add_header Cache-Control "public, immutable"; } location ~ .(css|js)$ { expires 7d; add_header Cache-Control "public, max-age=604800"; }
对于CDN场景,直接在控制台设置对应缓存规则,选择“文件后缀”或“目录”并指定过期时间,多数CDN服务商支持填写自定义HTTP头,优先级高于平台默认规则。
缓存过期策略的常见误区
- 所有资源统一过期时间:不同资源更新频率差异大,统一设置会造成资源浪费或更新滞后,应区分对待。
- 忽略版本号与哈希:只设置长过期时间,更新时仅修改文件内容,浏览器仍缓存旧版本,需让文件名变化,才能触发强制下载新资源。
- 动态接口被意外缓存:动静分离中,动态接口不应在CDN或反向代理层缓存,除非明确设计为可缓存,务必在响应头中加入
Cache-Control: no-cache或private。
强制刷新缓存的方法与适用场景
当缓存过期时间尚未到达,但已发布新版本或修复了紧急漏洞,就需要主动强制刷新缓存,强制刷新涉及多个层级,操作不当会影响可用性,甚至引发回源风暴。
触发强制刷新的典型场景
- 代码紧急上线:修复安全漏洞或关键逻辑错误,不能等待TTL自然过期。
- 配置与数据变更:更换CDN域名、修改回源地址、更新静态资源存储路径。
- 活动预热与回滚:大促前手动刷新缓存避免旧数据残留,活动结束后回滚到旧版本。
- 测试验证:调试阶段频繁修改资源,需反复确认最新效果。
各层级强制刷新实操
- 浏览器缓存:用户侧需按
Ctrl + F5或Cmd + Shift + R强制刷新,或通过开发者工具禁用缓存,更可靠的方式是在资源URL后添加查询参数(如?v=20260301),但已发布的旧版本无法自动更新。 - 反向代理层(Nginx):若使用
proxy_cache,删除缓存目录文件即可,命令示例:rm -rf /var/cache/nginx/
或使用
ngx_cache_purge
模块,通过特定URL触发单条缓存清理:
curl -X PURGE http://example.com/path/to/resource - CDN边缘节点:登录CDN控制台,提交URL或目录进行刷新,国内主流CDN服务商提供API,可集成到发布流程中。
# 简米云CDN刷新示例(需配置AccessKey) aliyun cdn RefreshObjectCaches --ObjectPath "http://www.example.com/static/" --ObjectType File
注意:CDN刷新通常有配额限制,每日免费额度有限,超出部分按次计费。刷新目录比刷新单条URL更高效,但影响范围大,需谨慎操作。
- 应用层缓存(Redis/Memcached):直接调用
flush命令或按key模式清除,使用redis-cli FLUSHALL可清空所有缓存,但生产环境不建议,推荐使用UNLINK或按业务前缀删除。
强制刷新策略的自动化与成本考量
- CI/CD集成:在发布流水线中增加缓存刷新步骤,每次部署自动执行,例如在Jenkins构建后调用CDN刷新API,确保上线后缓存立即更新。
- 灰度刷新:先刷新一小部分节点或某些边缘节点,观察无异常后再全量刷新,降低风险。
- 成本控制:CDN刷新费用因服务商而异,按条数或按目录计费,频繁刷新大量URL会产生较高成本,建议结合版本号策略,减少强制刷新场景,据统计,合理使用版本号可减少较大比例的CDN刷新请求。
动静分离缓存策略的行业实践
不同业务场景对缓存过期策略和强制刷新频率的要求差异明显,以下列举两个典型行业的做法。
电商平台:大促秒杀场景下的缓存策略
-
静态资源:图片、CSS、JS过期时间设为7天,但大促前会提前发布新版本并通过CDN预热,临时将过期时间缩短至1小时,确保活动页面元素实时更新。
-
强制刷新:通常选择在凌晨低峰期全局刷新,并配合API按商品ID刷新缓存,每次价格变动或库存调整,只强制刷新对应商品详情页的缓存,减少回源压力。

-
行业共识认为,电商平台应在缓存层设置多级过期时间,并预留强制刷新API供运营系统调用,避免运维人员手动操作。
社区:新闻资讯类网站 -
静态资源:CSS/JS过期时间设为30天,因为界面样式改动频率低,新闻详情页的HTML不缓存,但缩略图、广告图片等可缓存1天。
-
强制刷新:当新闻内容因审核撤回或修改时,运营人员可手动刷新特定页面的CDN缓存,对于重大新闻,通常采用自动刷新策略,通过CMS系统触发对应URL刷新。
缓存过期策略与强制刷新相互配合,前者是常态下的性能保障,后者是应急时的数据一致性工具,在实际运维中,没有一成不变的配置,需要根据资源更新频率、用户访问模式以及成本预算动态调整,掌握这些要点,才能让动静分离架构真正发挥效能。
动静分离缓存过期策略Q&A
如何设置静态资源缓存过期时间?
在Nginx或CDN控制台,通过expires指令或Cache-Control头指定秒数即可,对于长期不变的资源,设置为30天以上;对于频繁修改的JS/CSS,建议使用7天并结合版本号,避免因缓存导致用户无法及时获取新功能。
强制刷新缓存会不会影响网站访问?
强制刷新本身不会直接导致网站不可用,但若一次性刷新大量URL,可能引发回源流量激增,导致源站压力过大,建议分批刷新,或利用CDN预热功能,在刷新后立即回源缓存新内容,降低瞬间请求冲击。
CDN缓存刷新费用怎么算?
不同服务商计费方式不同,多数按刷新次数或条数计费,每日免费额度通常在几百到几千条不等,超出部分按条数收取少量费用,部分服务商对目录刷新按次收费,不限制内部URL数量,建议在业务低峰期进行刷新,并优先使用版本号机制减少刷新需求。
