缓存

本页面介绍您可以使用的控制 Cloud Storage 对象的缓存方式的选项。本页面重点介绍 Cloud Storage 内置缓存和 Cloud CDN,但 Cloud Storage 也与第三方 CDN 兼容。

概览

当 Cloud Storage 对象被缓存时,该对象的副本会存储在 Google 或互联网缓存中,以便在将来进行请求时更快地传送对象。虽然缓存可以提高性能,但如果您对对象进行了更新,但缓存继续传送早期版本的对象,那么就存在传送过时内容的风险。

Cloud Storage 的内置缓存

Cloud Storage 的行为类似于内容分发网络 (CDN),您无需承担任何工作,因为在默认情况下,可公开读取的对象通常缓存在 Cloud Storage 网络中。

对象的 Cache-Control 元数据决定了浏览器和互联网缓存可以缓存对象的时长。Cloud Storage 网络仅缓存可公开读取的对象,但代理或浏览器可能会根据 Cache-Control 元数据缓存对象,即使对象不可公开读取也是如此。此外,如果您撤消某个对象的公开访问权限,您仍然可以从缓存提供该对象,具体取决于其上次访问的时间及其 Cache-Control 设置。例如,如果使用 public, max-age=3600Cache-Control 提供对象,则该对象可以在缓存中保留一小时。

如需设置 Cache-Control 元数据,请参阅修改对象元数据

IAM 拒绝政策的内置缓存行为

当存在限制从主账号标识符 allUsers 读取某个对象的权限的组织级 IAM 拒绝政策时,即使存在向 allUsers 授予该对象的读取权限的存储桶级 IAM 政策,该对象的内置缓存也会被禁用。但是,如果 IAM 拒绝政策仅限制各个用户,则对象仍会启用内置缓存。

性能考虑因素

可公开缓存的对象的性能要好得多。如果您使用一个对象来控制许多客户端,并因此想停用缓存来提供最新的数据,可进行如下设置:

  • 改为考虑将对象的 Cache-Control 元数据设置为 public,并将 max-age 设置为 15-60 秒。大多数应用可以容忍对象过期几秒钟,以换取性能的提升。

  • 为对象使用 Cache-Control: no-store,指明不得为后续请求在任何缓存中缓存该对象。

将 Cloud Storage 与 Cloud CDN 搭配使用

为了在向用户分发内容时获得最佳性能,我们建议将 Cloud Storage 与 Cloud CDN 搭配使用。

如需使用 Cloud CDN,您必须将外部应用负载均衡器与 Cloud Storage 存储桶配合使用以作为后端。如需查看使用 Cloud Storage 存储桶设置 HTTP(S) 负载均衡器的教程,请参阅托管静态网站

Cloud CDN 缓存模式允许您对所有对象应用统一缓存配置。Cloud CDN 使用对象上设置的 Cache-Control 元数据来确定应如何缓存对象,除非您使用缓存模式或 TTL 限制替换 Cache-Control 元数据。

在 Cloud Storage 内置缓存和 Cloud CDN 之间进行选择时,请考虑以下各项:

特征 Cloud Storage Cloud CDN
可缓存文件大小上限 10 MiB 5 TiB
默认缓存到期时间 1 小时 1 小时(可配置)
支持 HTTPS 上的自定义网域
缓存失效操作

价格注意事项

就价格而言,选择 Cloud Storage 内置缓存还是 Cloud CDN 取决于您每月传送的数据量,这决定了产生的网络费用。

  • 如果您每月传送的可缓存数据少于几 GiB,那么使用 Cloud Storage 内置缓存的总费用可能较低。Cloud Storage 缓存产生的网络费用可能高于 Cloud CDN,因为会对缓存对象和未缓存对象收取相同的出站数据传输费用(这意味着您需要支付缓存命中的全部费用)。但是,您只需支付与 Cloud Storage 相关的数据存储和操作使用费,而不是为 Cloud Storage、Cloud CDN 和 Cloud Load Balancing 的组合付费。

  • 如果您经常每月传送 100GiB 或更多的可缓存数据,或者需要使用每个请求日志记录和自定义标头,那么使用 Cloud CDN 的总费用可能会更低。缓存填充会产生 Cloud Storage 出站数据传输和 Cloud CDN 缓存填充费用,缓存用尽后,将应用 Cloud CDN 网络价格。使用 Cloud CDN 节省的网络费用可能可以抵消与维护外部应用负载均衡器和 Cloud CDN 以及 Cloud Storage 相关的较高的运营费用。

后续步骤