[ PROMPT_NODE_24032 ]
Cache Reserve 设计模式
[ SKILL_DOCUMENTATION ]
# Cache Reserve 模式
## 最佳实践
### 1. 始终启用分层缓存 (Tiered Cache)
typescript
// Cache Reserve 设计为与分层缓存配合使用
const configuration = {
tieredCache: 'enabled', // 获得最佳性能所必需
cacheReserve: 'enabled', // 与分层缓存配合效果最佳
hierarchy: [
'下层缓存 (访客)',
'上层缓存 (源站区域)',
'Cache Reserve (持久化)',
'源站'
]
};
### 2. 设置适当的 Cache-Control 标头
typescript
// 适用于 Cache Reserve 的源站响应标头
const originHeaders = {
'Cache-Control': 'public, max-age=86400', // 24小时 (最小 10小时)
'Content-Length': '1024000', // 必需
'Cache-Tag': 'images,product-123', // 可选:用于清除
'ETag': '"abc123"', // 可选:用于重新验证
// 避免:'Set-Cookie' 和 'Vary: *' 会阻止缓存
};
### 3. 使用缓存规则进行精细控制
typescript
// 针对不同内容类型设置不同的 TTL
const cacheRules = [
{
description: '不可变资产的长期缓存',
expression: '(http.request.uri.path matches "^/static/.*\.[a-f0-9]{8}\.")',
action_parameters: {
cache_reserve: { eligible: true },
edge_ttl: { mode: 'override_origin', default: 2592000 }, // 30 天
cache: true
}
},
{
description: '普通图像的中等缓存',
expression: '(http.request.uri.path matches "\.(jpg|png|webp)$")',
action_parameters: {
cache_reserve: { eligible: true },
edge_ttl: { mode: 'override_origin', default: 86400 }, // 24 小时
cache: true
}
},
{
description: '从 Cache Reserve 中排除 API',
expression: '(http.request.uri.path matches "^/api/")',
action_parameters: { cache_reserve: { eligible: false }, cache: false }
}
];
### 4. 从智能体 (Workers) 使资产符合 Cache Reserve 条件
**注意**:这会修改响应标头以满足资格标准,但不会直接控制 Cache Reserve 存储(这是区域级自动化的)。
typescript
export default {
async fetch(request: Request, env: Env): Promise {
const response = await fetch(request);
if (!response.ok) return response;
const headers = new Headers(response.headers);
headers.set('Cache-Control', 'public, max-age=36000'); // 最小 10小时
headers.delete('Set-Cookie'); // 阻止缓存
// 确保存在 Content-Length
if (!headers.has('Content-Length')) {
const blob = await respo