缓存失效(有时称为缓存清除)是指声明缓存内容无效的过程。此过程会使相应条目从缓存中移除,然后在下次请求该内容时从源服务器重新填充。
媒体 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。
请参考以下示例:
您有以下缓存对象:
- 具有标记
status=200、content-type=video/mp4的缓存对象 #1 - 具有标记
status=404、content-type=text/plain的缓存对象 #2 - 具有标记
status=200、content-type=application/x-mpegurl的缓存对象 #3
- 具有标记
您发出请求以使具有
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
|
|
缓存标记限制
缓存标记具有以下限制:
- 每个标记不得超过 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 角色拥有此权限。
示例
以下示例展示了如何使 Media CDN 服务的缓存响应失效。
您可以在单个失效请求中组合使用 host、path 和 tags 字段,以使特定的一组内容失效。
按主机执行失效操作
控制台
- 在 Google Cloud 控制台中,前往 Media CDN 页面。
- 点击 Services(服务)标签。
- 点击一项服务。
- 点击缓存失效操作标签页。
- 如需按主机使缓存失效,请在主机部分指定主机名,除非您想使所有主机名的路径都失效。主机名不能包含
*。 - 点击失效,然后点击确认,以表明您希望 Media 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 控制台中,前往 Media CDN 页面。
- 点击 Services(服务)标签。
- 点击一项服务。
- 点击缓存失效操作标签页。
- 如需按路径使缓存失效,请在路径部分指定相应路径和文件名,例如
/videos/funny.mp4或/segments/e94a6b1f731/*。 - 点击失效。
gcloud
gcloud edge-cache services invalidate-cache SERVICE_NAME \
--path=PREFIX
替换以下内容:
- 将
SERVICE_NAME替换为 Edge Cache 服务的名称。 HOST,其中包含要失效的缓存条目的主机名。如需匹配任何主机名,请省略 host 标志。PREFIX,其路径前缀以“*”结尾,用于匹配要失效的缓存条目。
例如:
gcloud edge-cache services invalidate-cache SERVICE_NAME \
--path="/segments/e94a6b1f731/*"
您还可以通过省略末尾的 * 字符来使确切路径失效。传递 --path="/videos/funny.mp4" 会使与相应路径匹配的缓存响应(如果有)失效。
按缓存标记执行失效操作
控制台
- 在 Google Cloud 控制台中,前往 Media 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"
失效延迟时间
Media CDN 数千个位置的缓存失效操作通常会在全球范围内于 1 分钟内完成。
在某些情况下,失效可能需要更长时间,具体取决于系统负载、连接情况以及失效的内容量。
日志记录
如果启用了审核日志,则失效调用会记录到 Cloud Logging。
限制
失效操作的速率受限。如果您超出失效速率限制,则会收到 HTTP 429 错误消息,状态为 RESOURCE_EXHAUSTED。
失效操作的大小不受限。例如,失效 /images/my-image.png 计为一次失效操作。失效 /images/* 也计为一次失效操作。