2011-07-01 8 views
11

jestem flumoxed ... re this i this "meta" pytania ...OutputCache porcja danych długo nieaktualne

To bardzo prosty wniosek http:

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

który uderza trasy ozdobione :

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

jest wielokrotnie i nieprawidłowo Servin g albo 304 (bez zmian), jeśli zawierają if-Modified-Since lub stare dane dla 200, tj

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) 

Jak widać, to służy to prawie pół godziny przeszłość 5-minutowy automat; wygląda na to, że wewnętrzne elementy OutputCache po prostu nie zauważyły ​​czasu; p To wygaśnie ostatecznie (w rzeczywistości właśnie to zrobiło - moje żądanie Fri, 01 Jul 2011 09:56:20 GMT dostało wreszcie nowe dane), ale nie nigdzie jak punktualnie.

UPDATE:

I Uważa że pracuje gdybyśmy zabrali nagłówek akceptować-kodowania, ale nie; to nie zbyt - to po prostu nie działa na innym cyklu (czyli to, co należy się spodziewać, gdyż klucze są różne, dzięki uprzejmości VaryByContentEncoding):

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

daje:

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) 

Po raz kolejny” Zauważ, że jest obsługiwany poExpires.

A więc: co tu może być nie tak?

Dodatkowe; podczas gdy używamy opcji niestandardowej, nasz GetVaryByCustomString() poprawnie wywołuje base.GetVaryByCustomString(ctx, custom) dla opcji, których nie rozpoznaje, zgodnie z MSDN (rzeczywiście działa to dobrze dla drugiego przykładu powyżej).

+0

Marc Twój niestandardowy dostawca pamięci podręcznej danych wyjściowych nie mógłby być gdzieś otwarty, czy nie? –

+0

@ runxc1 Musiałbym sprawdzić, ale nasze domyślne narzędzie "idź do" tam jest czerwone jest przez booksleeve (oba są otwarte źródła) za pomocą niestandardowych wrapperów (które nie są). Jednak w mojej głowie brzmi nie tak, by myśleć tutaj o Redisie - będę musiał rzucić okiem na kod. –

+0

Czy kiedykolwiek znalazłeś niestandardowego dostawcę cache? Po prostu ciekawy, jak to, że naprawdę brakuje w nich wypieków. –

Odpowiedz

10

Czy istnieje szansa, że ​​używasz niestandardowego dostawcy pamięci podręcznej wyjścia? Hipotetycznie, jeśli był niestandardowy dostawca używający wymieniać wygaśnięcie zamiast bezwzględnego jeden, zobaczysz symptomy w ten sposób.

+5

Tak; okazuje się, że *** ssiemy *** –

+0

Jeff ** będzie ** strzelał ci za to, że nie ssałeś trochę mniej dzisiaj;)) –

+1

No cóż, przynajmniej nie zepsuliśmy jednostki czasu; to * może * być krępujące. –