使缓存内容失效

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

媒体 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 控制台中,前往媒体 CDN 页面。

    前往“媒体 CDN”页面

  2. 点击 Services(服务)标签。
  3. 点击一项服务。
  4. 点击缓存失效操作标签页。
  5. 如需按主机失效缓存,请为主机指定主机名,除非您要对所有主机名的路径执行失效操作。主机名不得包含 *
  6. 点击失效,然后点击确认,以指明您希望 Media CDN 使与主机匹配的内容失效。

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. 如需按路径使缓存失效,请为 Path 指定路径和文件名,例如 /videos/funny.mp4/segments/e94a6b1f731/*
  6. 点击失效

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" 会使与该路径匹配的缓存响应(如果有)失效。

按缓存标记执行失效操作

控制台

  1. 在 Google Cloud 控制台中,前往媒体 CDN 页面。

    前往“媒体 CDN”页面

  2. 点击 Services(服务)标签。
  3. 点击一项服务。
  4. 点击缓存失效操作标签页。
  5. 如需按标记验证缓存,请在缓存标记中指定一个或多个标记以使缓存失效。使用空格或英文逗号分隔标记。 您最多可以添加 10 个要失效的缓存标记。
  6. 点击失效

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"

失效延迟时间

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

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

日志记录

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

限制

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

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