使缓存内容失效

缓存失效(有时称为“缓存清除”)是指声明缓存内容无效的过程。这会导致该条目从缓存中移除,然后在下次请求相应内容时从源服务器重新填充。

媒体 CDN 支持多种选择要失效的内容的方式,如下所示:

  • 主机和网址路径
  • 网址前缀(通配符)
  • 缓存标记,包括适用于 statusorigincontent-type 的内置标记

您可以组合使用这些失效参数来定位特定的缓存响应,并最大限度地减少后续缓存填充对源站的负载。

支持的失效语法

支持的失效语法如下所示:

类型 语法 示例
主机失效 使指定主机的缓存响应失效。 gcloud edge-cache services invalidate-cache SERVICE_NAME \
    --host="media.example.com"
路径失效 使指定路径或路径前缀的缓存响应失效。 gcloud edge-cache services invalidate-cache SERVICE_NAME \
    --path="/content/1234/hls/*"

gcloud edge-cache services invalidate-cache SERVICE_NAME \
    --path="/videos/funny.mp4"
基于 HTTP 状态代码、来源名称或 MIME 类型的缓存标记失效 使包含匹配标记的缓存响应失效。多个标记会被视为布尔值 OR gcloud edge-cache services invalidate-cache SERVICE_NAME \
    --tags="status=404,origin=staging-origin"

gcloud edge-cache services invalidate-cache SERVICE_NAME \
    --tags="content-type=application/x-mpegurl"

注意:

  • 单个失效请求中最多可以指定 10 个缓存标记。
  • 您可以在单个失效请求中组合使用 hostpathtags。它们会被视为布尔值 AND
  • 指定多个缓存标记时,它们会被视为布尔值 OR。例如,如果您指定 --tags="status=404,origin=staging-origin",则缓存标记为 status=404所有响应和缓存标记为 origin=staging-origin所有响应都会失效。

缓存标记

借助缓存标记(或替代键),您可以根据任意元数据使内容失效。

这些标记的定义如下:

  • 在来源响应中设置 Cache-Tag HTTP 标头,将代码指定为以英文逗号分隔的值列表。
  • 根据响应的 HTTP 状态代码、Content-Type HTTP 响应标头中的 MIME 类型或提取响应的来源名称创建的内置代码。

如果在单个失效请求中指定多个标记,系统会将它们视为一个布尔值 OR

请思考以下示例:

  • 您有以下缓存对象:

    • 包含标记 status=200content-type=video/mp4 的缓存对象 1
    • 带有标记 status=404content-type=text/plain 的缓存对象 2
    • 包含标记 status=200content-type=application/x-mpegurl 的缓存对象 #3
  • 您发出请求,以使用 tags="status=200,content-type=text/plain" 使对象失效

  • 结果:所有三个缓存对象都会同时失效。这样可以避免必须指定所有可能的代码组合,其中一些组合可能未知。

注意:

  • 默认缓存标记不会包含在面向客户端的响应中,因为它们反映的是现有标头(例如状态行或 Content-Type)或内部配置详细信息。
  • 源在 Cache-Tag HTTP 响应标头中发送的缓存标记会发送给客户端。如果您想阻止将这些信息发送到客户端,请对 routeRule 使用 responseHeadersToRemove 功能来移除 Cache-Tag 标头。如需查看示例,请参阅自定义标头文档。

内置代码

系统会自动为响应应用以下缓存标记,以支持根据状态代码、MIME 类型或内容的提取来源使内容失效。您无需在源响应中指定这些标记。

标记 详细信息
status=HTTP_STATUS_CODE

status 缓存标记是根据缓存响应的返回 HTTP 状态代码设置的。

例如,您可以在失效请求中指定 status=404,以使所有缓存的 HTTP 404 响应失效。

content-type=MIME_TYPE

content-type 缓存标记是根据 Content-Type HTTP 响应标头中设置的 MIME 类型设置的。

例如,HLS 播放列表的 MIME 类型为 application/x-mpegURLvnd.apple.mpegURL

这样,您就可以使特定类型的内容失效。

origin=ORIGIN_NAME

origin 缓存标记是根据内容提取的来源的名称设置的。

origin 值引用 .routing.routeRules[].origin 的值,可让您使配置错误或可能存在异常行为的源服务器中的内容失效。

缓存标记限制

缓存代码具有以下限制:

  • 每个代码不得超过 120 字节
  • 每个缓存对象的标记名称总数不得超过 4 KiB(4096 字节)
  • 每个对象不得超过 50 个代码,不包括媒体 CDN 添加的默认代码
  • 必须是有效的 HTTP 令牌名称,如 HTTP RFC 7230 第 3.2.6 节中所定义
  • 不得包含内置的 status=origin=content-type= 前缀(系统会忽略这些前缀)。

系统会忽略不符合这些限制或不满足这些要求的代码。在某些情况下(例如响应标头过大时),响应会失败且不会缓存。

权限

networkservices.EdgeCacheServices.invalidateCache 权限用于控制对 invalidateCache API 的访问权限。networkservices.edgeCacheAdminnetworkservices.edgeCacheUser Identity and Access Management 角色包含此权限。

示例

以下示例展示了如何使 Media CDN 服务的缓存响应失效。

您可以在单个失效请求中组合使用 hostpathtags 字段,以失效一组特定内容。

按主机失效

控制台

  1. 前往 Google Cloud 控制台中的“Media CDN”页面。
    前往“媒体 CDN”页面
  2. 点击 Services(服务)标签。
  3. 点击您的服务。
  4. 点击缓存失效操作标签页。
  5. 对于要使之失效的路径模式,请输入主机名,然后输入路径。例如:media.example.com/catsmedia.example.com/cat*。 主机名不得包含 *

gcloud

gcloud edge-cache services invalidate-cache SERVICE_NAME \
    --host=HOST

替换以下内容:

  • SERVICE_NAME 替换为边缘缓存服务的名称。
  • HOST,其中包含要失效的缓存条目的完整主机名。

例如:

gcloud edge-cache services invalidate-cache SERVICE_NAME \
    --host="media.example.com"

按路径失效

控制台

  1. 前往 Google Cloud 控制台中的“Media CDN”页面。
    前往“媒体 CDN”页面
  2. 点击 Services(服务)标签。
  3. 点击您的服务。
  4. 点击缓存失效操作标签页。
  5. 在要使之失效的路径模式中,输入路径。 例如:/videos/funny.mp4/segments/e94a6b1f731/*

gcloud

gcloud edge-cache services invalidate-cache SERVICE_NAME \
    --path=PREFIX

替换以下内容:

  • SERVICE_NAME 替换为边缘缓存服务的名称。
  • HOST,其中包含要失效的缓存条目的主机名。如需匹配任何主机名,请省略主机标志。
  • 路径前缀以“*”结尾的 PREFIX,与要失效的缓存条目匹配。

例如:

gcloud edge-cache services invalidate-cache SERVICE_NAME \
    --path="/segments/e94a6b1f731/*"

您还可以通过省略尾部的 * 字符来使确切路径失效。传递 --path="/videos/funny.mp4" 会使与该路径匹配的缓存响应(如果有)失效。

根据缓存标记失效

控制台

Google Cloud 控制台不支持按缓存标记失效。

gcloud

gcloud edge-cache services invalidate-cache SERVICE_NAME \
    --tags=TAGS

替换以下内容:

  • SERVICE_NAME 替换为边缘缓存服务的名称。
  • TAGS 替换为标记的逗号分隔列表。

例如:

gcloud edge-cache services invalidate-cache SERVICE_NAME \
    --tags="status=404,content-type=text/plain"

失效延迟时间

在全球范围内,媒体 CDN 的数千个位置的缓存失效通常会在 1 分钟内完成。

在某些情况下,失效可能需要更长时间,具体取决于系统负载、连接性和要失效的内容量。

日志记录

如果启用了审核日志,系统会将失效调用记录到 Cloud Logging。

限制

失效操作的速率受限。如果您超出失效速率限制,则会收到状态为 RESOURCE_EXHAUSTED 的 HTTP 429 错误消息。

失效操作的大小并不受限。例如,失效 /images/my-image.png 计为一次失效操作。失效 /images/* 也计为一次失效操作。

此行为与 Cloud CDN 中的行为不同。Cloud CDN 每分钟支持一次失效操作。