2012-12-21 228 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