缓存失效操作(有时称为“缓存完全清除”)是 声明缓存内容无效。这会导致该条目 从缓存中移除,并在下次从源服务器重新填充时 请求的内容
媒体 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
的缓存对象 3content-type=application/x-mpegurl
- 包含标记
您发出请求,以使用
tags="status=200,content-type=text/plain"
使对象失效输出:所有三个缓存对象同时失效。这是为了 这样就不必指定所有可能的代码组合 未知。
注意:
- 默认缓存标记不会包含在面向客户端的响应中,因为 它们可以反映现有标题(如状态行或 Content-Type)或内部配置详细信息。
Cache-Tag
HTTP 响应标头中由源站发送的缓存标记 发送给客户端如果您想阻止将这些信息发送到客户端,请对routeRule
使用responseHeadersToRemove
功能来移除Cache-Tag
标头。如需查看示例,请参阅 自定义标头 文档。
内置代码
响应会自动应用以下缓存标记,以支持 根据状态代码、MIME 类型或 内容提取自哪个网域。您无需在源响应中指定这些标记。
标记 | 详细信息 |
---|---|
status=HTTP_STATUS_CODE
|
例如,您可以通过以下方法使所有缓存的 HTTP 404 响应失效:
在失效请求中指定 |
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 角色。
示例
以下示例展示了如何使 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 支持每分钟一次失效。