2011-07-01 32 views
11

Tôi flumoxed ... tái thisthis câu hỏi "meta" ...OutputCache phục vụ dữ liệu dài cũ

Một yêu cầu http rất cơ bản:

GET http://stackoverflow.com/feeds/tag?tagnames=c%23&sort=newest HTTP/1.1 
Host: stackoverflow.com 
Accept-Encoding: gzip,deflate 

đó chạm một con đường được trang trí bằng :

[OutputCache(Duration = 300, VaryByParam = "tagnames;sort", 
    VaryByContentEncoding = "gzip;deflate", VaryByCustom = "site")] 

là lần và sai servin g hoặc là một 304 (không thay đổi) nếu bạn bao gồm if-Modified-Since, hoặc dữ liệu cũ cho một 200, tức là

HTTP/1.1 200 OK 
Cache-Control: public, max-age=0 
Content-Type: application/atom+xml; charset=utf-8 
Content-Encoding: gzip 
Expires: Fri, 01 Jul 2011 09:17:08 GMT 
Last-Modified: Fri, 01 Jul 2011 09:12:08 GMT 
Vary: * 
Date: Fri, 01 Jul 2011 09:42:46 GMT 
Content-Length: 14714 
(payload, when decoded = some long-stale data) 

Như bạn thấy, nó được phục vụ này gần nửa giờ qua khe cắm 5 phút; có vẻ như các bên trong của OutputCache chỉ đơn giản là không thông báo thời gian, p Nó sẽ hết hạn cuối cùng (trên thực tế, nó vừa làm như vậy - yêu cầu Fri, 01 Jul 2011 09:56:20 GMT cuối cùng của tôi đã có dữ liệu mới), nhưng không phải bất cứ nơi nào như đúng giờ.

UPDATE:

tôi tin rằng nó đã được làm việc nếu chúng ta lấy đi header Accept-Encoding, nhưng không có; điều này không quá - nó chỉ thất bại trên một chu kỳ khác nhau (đó là những gì chúng ta nên mong đợi từ các phím khác nhau, biếu không của VaryByContentEncoding):

GET http://stackoverflow.com/feeds/tag?tagnames=c%23&sort=newest HTTP/1.1 
Host: stackoverflow.com 

cho:

HTTP/1.1 200 OK 
Cache-Control: public, max-age=0 
Content-Type: application/atom+xml; charset=utf-8 
Expires: Fri, 01 Jul 2011 10:09:58 GMT 
Last-Modified: Fri, 01 Jul 2011 10:04:58 GMT 
Vary: * 
Date: Fri, 01 Jul 2011 10:17:20 GMT 
Content-Length: 66815 
(payload = some stale data) 

Một lần nữa, bạn' sẽ nhận thấy nó đang được phân phát sauExpires.

Vì vậy: điều gì có thể xảy ra ở đây?

Bổ sung; trong khi chúng tôi đang sử dụng tùy chọn tùy chỉnh, GetVaryByCustomString() các cuộc gọi chính xác base.GetVaryByCustomString(ctx, custom) của chúng tôi cho các tùy chọn mà nó không nhận ra, theo MSDN (thực sự điều này hoạt động tốt cho ví dụ thứ hai ở trên).

+0

Marc nhà cung cấp bộ nhớ cache đầu ra tùy chỉnh của bạn sẽ không xảy ra để được mở nguồn ở đâu đó? –

+0

@ runxc1 Tôi phải kiểm tra, nhưng công cụ "go to" mặc định của chúng tôi có màu đỏ là qua booksleeve (cả hai đều là mã nguồn mở) bằng cách sử dụng một số trình bao bọc tùy chỉnh (không phải là). Tuy nhiên, nó có vẻ sai lầm trong đầu của tôi để suy nghĩ redis ở đây - Tôi sẽ phải xem xét mã. –

+0

Bạn đã bao giờ tìm thấy nhà cung cấp bộ nhớ cache đầu ra tùy chỉnh chưa? Chỉ cần tò mò vì nó cảm thấy như nướng trong những người đang thực sự thiếu. –

Trả lời

10

Có cơ hội nào bạn đang sử dụng nhà cung cấp bộ nhớ cache đầu ra tùy chỉnh không? Hypothetically, nếu có một nhà cung cấp tùy chỉnh sử dụng nói rằng một trượt hết hạn thay vì một tuyệt đối, bạn sẽ thấy các triệu chứng như thế này.

+5

Có; nó chỉ ra rằng *** chúng tôi hút *** –

+0

Jeff ** sẽ ** bắn bạn vì không hút một chút ít ngày hôm nay;)) –

+1

Ah tốt, ít nhất chúng tôi đã không mess lên các đơn vị thời gian; * sẽ * lúng túng –

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