使缓存内容失效

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

媒体 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 个字节
  • 每个缓存对象的代码名称总数不得超过 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 角色拥有此权限。

示例

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

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

由主机失效

控制台

  1. 转到 Google Cloud 控制台中的“媒体 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 控制台中的“媒体 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 上数千个位置的缓存失效通常在一分钟内完成。

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

日志记录

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

限制

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

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

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