使缓存内容失效

缓存失效操作(有时称为“缓存完全清除”)是 声明缓存内容无效。这会导致该条目 从缓存中移除,并在下次从源服务器重新填充时 请求的内容

媒体 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=200 的缓存对象 3 content-type=application/x-mpegurl
  • 您发出请求,以使用 tags="status=200,content-type=text/plain" 使对象失效

  • 输出:所有三个缓存对象同时失效。这是为了 这样就不必指定所有可能的代码组合 未知。

注意:

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

内置代码

响应会自动应用以下缓存标记,以支持 根据状态代码、MIME 类型或 内容提取自哪个网域。您无需在源响应中指定这些标记。

标记 详细信息
status=HTTP_STATUS_CODE

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

例如,您可以通过以下方法使所有缓存的 HTTP 404 响应失效: 在失效请求中指定 status=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 字节
  • 每个缓存对象的代码名称总数不得超过 1KiB(1024 字节)
  • 每个对象不得超过 10 个代码(不包括由以下人员添加的默认代码) 媒体 CDN
  • 必须是 HTTP RFC 7230 第 3.2.6 节中定义的有效的 HTTP 令牌名称
  • 不得包含内置的 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 支持每分钟一次失效。