Tôi flumoxed ... tái this và this 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).
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 đó? –
@ 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ã. –
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. –