自定义缓存规则

深入了解CDN缓存机制,配置高级缓存规则,优化网站性能

概述

自定义缓存规则允许您根据业务需求精确控制CDN的缓存行为,通过灵活的规则配置实现最优的缓存策略。

高级功能:支持正则表达式、条件判断、动态缓存键等高级缓存配置

缓存规则类型

文件扩展名规则

根据文件扩展名设置缓存策略

规则类型: file_extension
匹配条件: *.css, *.js, *.jpg, *.png
缓存时间: 7天
忽略参数: true

路径匹配规则

根据URL路径设置缓存策略

规则类型: path
匹配条件: /images/*, /static/*
缓存时间: 30天
忽略参数: true

正则表达式规则

使用正则表达式精确匹配URL

规则类型: regex
匹配条件: ^/api/v[0-9]+/.*$
缓存时间: 不缓存
忽略参数: false

请求头规则

根据HTTP请求头设置缓存策略

规则类型: header
匹配条件: User-Agent: Mobile
缓存时间: 1小时
忽略参数: false

缓存键策略

完整URL缓存键

包含所有URL参数和路径的完整缓存键

适用场景:

  • 动态内容
  • 个性化页面
  • 带参数的API接口
URL: https://example.com/page?id=123&lang=en
缓存键: https://example.com/page?id=123&lang=en

忽略参数缓存键

忽略URL参数,只使用路径部分作为缓存键

适用场景:

  • 静态资源
  • 版本号参数
  • 跟踪参数
URL: https://example.com/style.css?v=1.0&t=123456
缓存键: https://example.com/style.css

自定义缓存键

根据业务需求自定义缓存键规则

配置示例:

缓存键规则: {host}{path}?{query:sort,filter}
说明: 只保留sort和filter参数

条件缓存

基于请求方法的缓存

条件: request.method == "GET"
缓存时间: 1小时
条件: request.method == "POST"
缓存时间: 不缓存

基于用户代理的缓存

条件: request.header["User-Agent"] contains "Mobile"
缓存时间: 30分钟
条件: request.header["User-Agent"] contains "Desktop"
缓存时间: 2小时

基于地理位置的缓存

条件: request.header["CF-IPCountry"] == "CN"
缓存时间: 1小时
条件: request.header["CF-IPCountry"] == "US"
缓存时间: 2小时

缓存更新策略

被动更新

  • 缓存过期后自动回源更新
  • 适用于大多数静态内容
  • 减少源站压力
  • 可能产生缓存穿透

主动更新

  • 内容更新时主动清除缓存
  • 适用于动态内容
  • 保证内容实时性
  • 增加源站压力

预热缓存

  • 提前缓存热点内容
  • 提升用户体验
  • 减少冷启动时间
  • 需要预测热点内容

边缘缓存

  • 在边缘节点缓存内容
  • 减少回源请求
  • 提升响应速度
  • 需要合理配置TTL

高级配置示例

电商网站缓存策略

# 商品图片缓存30天
rule: path == "/products/*/images/*"
cache_time: 2592000
ignore_params: true
# 商品详情页缓存1小时
rule: path == "/products/*"
cache_time: 3600
ignore_params: false
# 购物车API不缓存
rule: path == "/api/cart/*"
cache_time: 0

新闻网站缓存策略

# 新闻列表页缓存10分钟
rule: path == "/news"
cache_time: 600
# 新闻详情页缓存1小时
rule: regex == "^/news/[0-9]+$"
cache_time: 3600
# 评论API不缓存
rule: path == "/api/comments/*"
cache_time: 0

性能优化建议

缓存规则优化

  • 合理设置缓存时间,平衡性能和实时性
  • 使用版本号管理静态资源更新
  • 避免过度细化的缓存规则
  • 定期清理无效的缓存规则

缓存键优化

  • 选择合适的缓存键策略
  • 避免缓存键冲突
  • 使用有意义的缓存键
  • 监控缓存命中率

常见问题

Q: 如何调试缓存规则?

A: 可以使用缓存调试工具,查看请求的缓存状态和匹配的规则。

Q: 缓存规则优先级如何确定?

A: 规则按添加顺序执行,越早添加的规则优先级越高。

Q: 如何提高缓存命中率?

A: 合理设置缓存时间,使用忽略参数策略,避免过度细化的规则。

Q: 正则表达式规则性能如何?

A: 正则表达式规则性能较低,建议优先使用文件扩展名和路径匹配规则。

下一步

自定义缓存规则学习完成后,建议您继续学习: