缓存失效(或缓存清除)是指声明缓存内容无效的过程。 此操作会从缓存中移除内容,确保下次请求直接从源服务器提取。
媒体 CDN 支持多种选择要失效的内容的方式,如下所示:
- 主机和网址路径
- 网址前缀(通配符)
- 缓存标记,包括
status、origin和content-type的内置标记
您可以组合使用这些失效参数,以定位特定的缓存响应,并最大限度地减少后续缓存填充时的源站负载。
支持的失效语法
支持的失效语法如下所示:
| 类型 | 语法 | 示例 |
|---|---|---|
| 主机失效 | 使指定主机的缓存响应失效。 |
gcloud edge-cache services invalidate-cache
SERVICE_NAME \
|
| 路径失效 | 使指定路径或路径前缀的缓存响应失效。 |
gcloud edge-cache services invalidate-cache
SERVICE_NAME \
gcloud edge-cache services invalidate-cache
SERVICE_NAME \
|
| 基于 HTTP 状态代码、来源名称或 MIME 类型的缓存标记失效 |
使具有匹配标记的缓存响应失效。多个标记会被
视为布尔值 OR。
|
gcloud edge-cache services invalidate-cache
SERVICE_NAME \
gcloud edge-cache services invalidate-cache
SERVICE_NAME \
|
注意:
- 在单个失效请求中,最多可以指定 10 个缓存标记。
- 您可以在单个失效请求中组合使用
host、path和tags。它们会被视为布尔值AND。 - 指定多个缓存标记时,它们会被视为布尔值
OR。例如,如果您指定--tags="status=404,origin=staging-origin",则缓存标记为status=404的 所有响应以及缓存标记为origin=staging-origin的 所有响应都会失效。
缓存标记
借助缓存标记(也称为代理键),您可以根据任意元数据使内容失效。
这些标记由以下内容定义:
- 在来源响应中设置
Cache-TagHTTP 标头,并将标记指定为逗号分隔列表值。 - 基于响应的 HTTP 状态代码、
Content-TypeHTTP 响应标头中的 MIME 类型或提取响应的来源名称的内置标记。
在单个失效请求中指定多个标记时,它们会被视为布尔值 OR。
请参考以下示例:
您有以下缓存对象:
- 缓存对象 #1,标记为
status=200、content-type=video/mp4 - 缓存对象 #2,标记为
status=404、content-type=text/plain - 缓存对象 #3,标记为
status=200、content-type=application/x-mpegurl
- 缓存对象 #1,标记为
您发出请求,使标记为
tags="status=200,content-type=text/plain"的对象失效结果:所有三个缓存对象同时失效。这是为了避免必须指定所有可能的标记组合,其中一些组合可能是未知的。
注意:
- 默认缓存标记不包含在面向客户端的响应中,因为它们反映的是现有标头(例如状态行或 Content-Type)或内部配置详细信息。
- 来源在
Cache-TagHTTP 响应标头中发送的缓存标记会发送到客户端。如果您想阻止这些标记发送到客户端,请在routeRule上使用responseHeadersToRemove功能来移除Cache-Tag标头。如需查看示例,请参阅 自定义标头 文档。
内置标记
响应会自动应用以下缓存标记,以支持根据状态代码、MIME 类型或提取内容的来源使内容失效。您无需在来源响应中指定这些标记。
| 标记 | 详细信息 |
|---|---|
status=HTTP_STATUS_CODE
|
例如,您可以通过
在失效请求中指定 |
content-type=MIME_TYPE
|
例如,HLS 播放列表的 MIME 类型为
这样,您就可以使特定类型的内容失效。 |
origin=ORIGIN_NAME
|
The The |
缓存标记限制
缓存标记具有以下限制:
- 每个标记不得超过 120 个字节
- 每个缓存对象的标记名称总数不得超过 4 KiB(4096 个字节)
- 每个对象不得超过 50 个标记,不包括媒体 CDN 添加的默认标记
- 必须是有效的 HTTP 令牌名称,如 HTTP RFC 7230 的第 3.2.6 节中所定义
- 不得包含内置的
status=、origin=或content-type=前缀(这些前缀会被忽略)。
不符合这些限制或要求的标记会被忽略。在某些情况下(例如响应标头过大时),响应会失败,并且不会被缓存。
权限
networkservices.EdgeCacheServices.invalidateCache
权限控制对 invalidateCache API 的访问。
networkservices.edgeCacheAdmin 和 networkservices.edgeCacheUser Identity and Access Management 角色拥有此权限。
示例
以下示例展示了如何使媒体 CDN 服务的缓存响应失效。
您可以在单个失效请求中组合使用 host、path 和 tags 字段,使特定的一组内容失效。
按主机失效
控制台
- 在 Google Cloud 控制台中,前往 媒体 CDN 页面。
- 点击 Services (服务)标签。
- 点击一项服务。
- 点击缓存失效操作 标签页。
- 如需按主机使缓存失效,请在主机部分指定主机名,除非
您想使所有主机名的路径都失效。
主机名不得包含
*。 - 点击失效 ,然后点击确认 ,以表明您希望媒体 CDN 使与主机匹配的内容失效。
gcloud
gcloud edge-cache services invalidate-cache SERVICE_NAME \
--host=HOST
替换以下内容:
- 将
SERVICE_NAME替换为 Edge Cache 服务的名称。 - 将
HOST替换为要失效的缓存条目的完整主机名。
例如:
gcloud edge-cache services invalidate-cache SERVICE_NAME \
--host="media.example.com"
使与主机关联的所有内容失效可能存在风险,并会影响性能。请考虑提供特定路径或相关缓存标记,以缩小失效范围。
按路径失效
控制台
- 在 Google Cloud 控制台中,前往 媒体 CDN 页面。
- 点击 Services (服务)标签。
- 点击一项服务。
- 点击缓存失效操作 标签页。
- 如需按路径使缓存失效,请在路径 部分指定路径和
文件名,例如
/videos/funny.mp4或/segments/e94a6b1f731/*。 - 点击失效 。
gcloud
gcloud edge-cache services invalidate-cache SERVICE_NAME \
--path=PREFIX
替换以下内容:
- 将
SERVICE_NAME替换为 Edge Cache 服务的名称。 - 将
PREFIX替换为以“*”结尾的路径前缀,该前缀与要失效的缓存条目匹配。
例如:
gcloud edge-cache services invalidate-cache SERVICE_NAME \
--path="/segments/e94a6b1f731/*"
您还可以省略尾随的 * 字符,使确切路径失效。传递 --path="/videos/funny.mp4" 会使与该路径匹配的缓存响应(如果有)
失效。
按缓存标记失效
控制台
- 在 Google Cloud 控制台中,前往 媒体 CDN 页面。
- 点击 Services (服务)标签。
- 点击一项服务。
- 点击缓存失效操作 标签页。
- 如需按标记使缓存失效,请在缓存标记部分指定一个或多 个标记,以使缓存失效。使用空格或英文逗号分隔标记。 您最多可以添加 10 个缓存标记以使其失效。
- 点击失效 。
gcloud
gcloud edge-cache services invalidate-cache SERVICE_NAME \
--tags=TAGS
替换以下内容:
- 将
SERVICE_NAME替换为 Edge Cache 服务的名称。 - 将
TAGS替换为以逗号分隔列表形式的标记。
例如:
gcloud edge-cache services invalidate-cache SERVICE_NAME \
--tags="status=404,content-type=text/plain"
失效延迟时间
在媒体 CDN 的数千个位置中,缓存失效操作通常会在全球范围内在一分钟内完成。
在某些情况下,失效操作可能需要更长时间,具体取决于系统负载、连接和失效内容的量。
日志记录
如果启用了审核日志,失效调用将记录到 Cloud Logging。
限制
失效操作的速率受限。如果您超出 失效操作速率限制,
则会收到 HTTP 429 错误消息,状态为 RESOURCE_EXHAUSTED。
无论路径的大小或范围如何,每个失效请求都算作一次操作,并计入速率限制。例如,使单个文件 (/images/my-image.png) 或通配符路径 (/images/*) 失效都算作一个失效请求。