2012-12-21 45 views
25

Mất bao lâu để thay đổi tệp trong Google Cloud Storage để phổ biến?Tuyên truyền Google Cloud Storage

Tôi đang gặp vấn đề rất khó chịu khi tôi thay đổi nội dung của tệp và tải lên lại thông qua gsutil, nhưng thay đổi không hiển thị trong vài giờ. Có cách nào để buộc một tập tin thay đổi để tuyên truyền mọi thứ ngay lập tức?

Nếu tôi xem tệp trong bảng điều khiển Google Cloud Storage, tệp sẽ thấy tệp mới, nhưng sau đó nếu tôi nhấn URL công khai, đó là phiên bản cũ và trong một số trường hợp, 2 phiên bản trước.

Có tiêu đề mà tôi không đặt không?

EDIT:

tôi đã cố gắng gsutil -h "Cache-Control: no-cache" cp -a public-read MyFile và nó không giúp đỡ, nhưng có lẽ các tập tin cũ cần phải hết hạn trước khi phiên bản no-cache mới tiếp quản?

Tôi đã làm một -Tôi curl trên các tập tin và nhận được trở lại này:

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 

Mà dường như để cho biết nó sẽ hết hạn trong vòng một tiếng, mặc dù no-cache.

Trả lời

33

Google Cloud Storage cung cấp tính nhất quán dữ liệu mạnh mẽ: khi ghi hoàn thành, một bài đọc từ bất kỳ đâu trên thế giới sẽ nhận được dữ liệu gần đây nhất. Tuy nhiên, nếu bạn bật bộ nhớ đệm (mặc định là đúng cho bất kỳ đối tượng có thể đọc công khai nào), lần đọc đối tượng đó có thể thấy phiên bản của đối tượng cũ như Độ tuổi tối đa của Cache-Control được chỉ định trên đối tượng. Nếu, ví dụ, bạn đã tải lên các tập tin như thế này:

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

Bạn có thể thấy rằng max-age là 1 giờ (3600 giây):

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 
    ... 

Nếu bạn muốn ngăn chặn một thể đọc được công khai đối tượng bị lưu trữ bạn có thể làm:

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

Ngoài ra, bạn có thể thiết lập một max-age ngắn trên đối tượng:

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

Mike Schwartz, nhóm Google Cloud Storage

+1

Tôi đã cập nhật các câu hỏi của mình để bao gồm tôi đã thử không có bộ nhớ cache, nhưng tôi vẫn thấy độ tuổi tối đa = 3600. Tệp cũ có cần hết hạn trước khi tệp no-cache mới chiếm không? –

+0

OK, có vẻ như trường hợp bạn phải chờ phiên bản được lưu trong bộ nhớ cache cũ hết hạn trước khi phiên bản không có bộ nhớ cache chiếm hết. Bây giờ nó đã hết hạn, phiên bản không có bộ đệm sẽ hiển thị chính xác. –

+3

@ như vậy sẽ rất tuyệt khi có một tính năng làm mất hiệu lực/xóa bộ nhớ cache như trên CDN. – themihai

Các vấn đề liên quan