缓存失效操作(有时称为“缓存完全清除”)是声明缓存内容无效的过程。这会导致从缓存中移除相应条目,然后在下次请求内容时从源服务器重新填充相应条目。
媒体 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 个字节
- 每个缓存对象的代码名称总数不得超过 1KiB(1024 字节)
- 每个对象不得超过 10 个标记(不包括媒体 CDN 添加的默认标记)
- 必须是 HTTP RFC 7230 第 3.2.6 节中定义的有效的 HTTP 令牌名称
- 不得包含内置的
status=
、origin=
或content-type=
前缀(这些前缀会被忽略)。
不在这些限制或满足要求的代码将被忽略。在某些情况下(例如,响应标头过大时),响应会失败且不会被缓存。
权限
networkservices.EdgeCacheServices.invalidateCache
权限用于控制对 invalidateCache
API 的访问权限。networkservices.edgeCacheAdmin
和 networkservices.edgeCacheUser
Identity and Access Management 角色拥有此权限。
示例
以下示例展示了如何使媒体 CDN 服务的缓存响应失效。
您可以在单个失效请求中合并 host
、path
和 tags
字段,使一组特定内容失效。
由主机失效
控制台
- 转到 Google Cloud 控制台中的“媒体 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 控制台中的“媒体 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 上数千个位置的缓存失效通常在一分钟内完成。
在某些情况下,失效操作可能需要更长时间,具体取决于系统负载、连接和失效内容的数量。
日志记录
如果启用了审核日志,则失效调用会记录到 Cloud Logging。
限制
失效操作的速率受限。如果超过失效速率限制,则会收到状态为 RESOURCE_EXHAUSTED
的 HTTP 429
错误消息。
失效操作的大小不限。例如,使 /images/my-image.png
失效,就计为一次失效操作。失效 /images/*
也计为一次失效操作。
此行为与 Cloud CDN 中的行为不同。Cloud CDN 支持每分钟执行一次失效操作。