缓存失效(有时称为“缓存清除”)是指声明缓存内容无效的过程。这会导致该条目从缓存中移除,然后在下次请求相应内容时从源服务器重新填充。
媒体 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-Tag
HTTP 标头,将代码指定为以英文逗号分隔的值列表。 - 根据响应的 HTTP 状态代码、
Content-Type
HTTP 响应标头中的 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-Tag
HTTP 响应标头中发送的缓存标记会发送给客户端。如果您想阻止将这些信息发送到客户端,请对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”页面。
前往“媒体 CDN”页面 - 点击 Services(服务)标签。
- 点击您的服务。
- 点击缓存失效操作标签页。
- 对于要使之失效的路径模式,请输入主机名,然后输入路径。例如:
media.example.com/cats
或media.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"
按路径失效
控制台
- 前往 Google Cloud 控制台中的“Media CDN”页面。
前往“媒体 CDN”页面 - 点击 Services(服务)标签。
- 点击您的服务。
- 点击缓存失效操作标签页。
- 在要使之失效的路径模式中,输入路径。
例如:
/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 每分钟支持一次失效操作。