AWS S3 - 缓存文件

时间:2018-02-23 19:14:10

标签: amazon-web-services caching amazon-s3 browser-cache

我正在从S3 Bucket提供我的webapp的所有图像。问题是,如果我通过Java SDK更新文件,由于caché,网站不会刷新图像。

我知道缓存是一件非常好的事情。我的问题是,我正在公开文章目录,图像是由他们的文章代码命名的。例如,文章ABC101的图像为abc101.jpg;所以重命名图像不是我的选择。

我只想更新图像时,我根本不想打破缓存。

我怎样才能做到这一点?图像几乎每天都会更新,由于这个问题,用户无法看到新图像。

2 个答案:

答案 0 :(得分:0)

根据您的应用程序,图像缓存可能是一件好事:页面加载速度更快,流量减少等等。

在处理缓存时,您可以做的最好的事情是"推荐"到下游你希望你的图像缓存多长时间。但请记住,你没有办法强迫他们遵守你的建议"。

所以,而不是试图"击败"在缓存中,您应该(a)拥抱缓存并将其用于您的优势,以及(b)在S3中更新时更改图像名称。

  1. 通过有效使用缓存标头(例如Cache-Controlmaxages-maxage等,故意在缓存中为您的图片提供较长的生命周期。这样可以减少页面加载时间当您的图像未更新时
  2. 如果要通过Java SDK上传新图像,而不是覆盖现有图像,请创建新图像并在下一页加载时使用该图像。这样,由于图像名称是新的,客户端将被迫下载它。
  3. 然而,如果你坚持"殴打"缓存,您可以做的最好的事情是使用缓存标头为您的图像提供非常短的(例如0秒)缓存生命周期。但是如果你这样做,他们会在没有改变时不断下载和重新下载图像。

答案 1 :(得分:0)

您可以通过向网址添加未使用的参数来解决此问题,即代替img src =" myimage.jpg",将其更改为myimage.jpg?v = 20180223(例如)

可能您可以自动生成此网址版本'数。例如,对于我支持的大型asp.net应用程序,我们使用了内部版本号。每次将构建推送到生产时,都会以编程方式更新?v = xxxxx参数;您可以为您的特定设置自定义该策略。

包含额外参数会强制浏览器请求最新图像,并且会将其缓存到版本“#”之前。变化。