2012-12-21 97 views
25

需要多长时间才能更改Google云端存储中的文件进行传播?Google云端存储传播

我有这个非常令人沮丧的问题,我更改文件的内容并通过gsutil重新上传,但更改不会显示几个小时。有没有办法强制更改文件立即传播一切?

如果我看一下Google云端存储控制台中的文件,它会看到新文件,但如果我点击公共URL,它就是旧版本,并且在某些情况下是2个版本。

有没有标题,我没有设置?

编辑:

我试图gsutil -h "Cache-Control: no-cache" cp -a public-read MyFile,并没有帮助,但也许旧的文件需要到期新无缓存版本接管之前?

我做了该文件的卷曲-I和得到这个回:

HTTP/1.1 200 OK 
Server: HTTP Upload Server Built on Dec 12 2012 15:53:08 (1355356388) 
Expires: Fri, 21 Dec 2012 19:58:39 GMT 
Date: Fri, 21 Dec 2012 18:58:39 GMT 
Last-Modified: Fri, 21 Dec 2012 18:53:41 GMT 
ETag: "66d820174d6de17a278b327e4c3e9b4e" 
x-goog-sequence-number: 3 
x-goog-generation: 1356116021512000 
x-goog-metageneration: 1 
Content-Type: application/octet-stream 
Content-Language: en 
Accept-Ranges: bytes 
Content-Length: 160 
Cache-Control: public, max-age=3600, no-transform 
Age: 3449 

这似乎表明它会在一个小时内,尽管到期的无缓存。

回答

33

Google Cloud Storage提供了强大的数据一致性:一旦写入完成,世界上任何地方的读取都将获取最新的数据。但是,如果启用缓存(对于任何可公开读取的对象,默认情况下都是true),读取该对象可以看到与对象上指定的Cache-Control max-age一样旧的对象版本。如果,例如,您上传这样的文件:

gsutil cp -a public-read file gs://my_bucket/file 

你可以看到,最大年龄为1小时(3600秒):

gsutil ls -L gs://my_bucket/file 
gs://my_bucket/file: 
    Creation time: Fri, 21 Dec 2012 19:59:57 GMT 
    Cache-Control: public, max-age=3600, no-transform 
    Content-Length: 1065 
    Content-Type: text/plain 
    ETag:  eb3fb83beedf1efffe5b8e32e8d6a65a 
    ... 

如果要防止公开可读被缓存的对象,你可以这样做:

gsutil setmeta -h Cache-Control:no-cache gs://my_bucket/file 

或者,你可以设定一个较短的最大年龄的对象:

gsutil setmeta -h 'Cache-Control:public, max-age=600, no-transform' 

Mike Schwartz,谷歌云存储团队

+1

我更新了我的问题,其中包括我尝试过无缓存,但我仍然看到max-age = 3600。旧文件是否需要在新的no-cache文件接管之前过期? –

+0

好吧,看起来确实如此,您必须等待旧的缓存版本在无缓存版本接管之前过期。现在它已经过期,无缓存版本正确显示。 –

+3

@mike有一个功能可以像CDN上一样使缓存失效/刷新缓存。 – themihai