Контролът на кеша се игнорира

В момента работя с Retrofit и Okhttp и се опитвам да кеширам някои GET отговори. Моят код е:

OkHttpClient okHttpClient = new OkHttpClient();
    File cacheDir = new File(System.getProperty("java.io.tmpdir"),
            "ddcache");
    HttpResponseCache cache = new HttpResponseCache(cacheDir, 2024);
    okHttpClient.setResponseCache(cache);
    OkClient cl=new OkClient(okHttpClient);
    restAdapter = new RestAdapter.Builder().setEndpoint(API_URL)
            .setLogLevel(RestAdapter.LogLevel.FULL)
            .setClient(cl).build();

И дневникът показва тази заглавка:

HTTP/1.1 200 OK
Cache-Control: max-age=7200
Connection: Keep-Alive
Content-Type: text/html
Date: Tue, 18 Mar 2014 18:38:16 GMT
Keep-Alive: timeout=3, max=100
OkHttp-Received-Millis: 1395167895452
OkHttp-Response-Source: NETWORK 200
OkHttp-Sent-Millis: 1395167895378
Server: Apache/2.2.26 (Unix)
Transfer-Encoding: chunked
X-Powered-By: PHP/5.3.28

Проверявам отговора, като връщам Server Unix Time при всяко повикване и винаги връща ново, което означава

Кеш контрол: max-age=7200

напълно се игнорира Журналният файл в кеша също се актуализира с бележки „ЧИСТИ“ и „МРЪСНИ“, но нищо не се кешира. Има ли нещо очевидно, което не виждам?


person LeDon    schedule 18.03.2014    source източник
comment
Как изглежда вашата молба? Не успях да възпроизведа проблема в тест. gist.github.com/swankjesse/a2fba4b1277b4cf4c973   -  person Jesse Wilson    schedule 19.03.2014
comment
Добре, опитах вашия пример и той кешира нещо в дадената папка. Може би е нещо със сървърното време или каквото и да било. Ако погледна във файла на журнала, той се записва, но моментално се изтрива.   -  person LeDon    schedule 20.03.2014
comment
Ааа, предполагам, че не четете пълното тяло на HTTP отговора, което води до прекъсване на отговора на кеша. Използвате ли OkHttp 1.5.2? Може да се оправи.   -  person Jesse Wilson    schedule 25.03.2014
comment
да Използвам OkHttp 1.5.2 заедно с най-новия RetroFit. Така че предполагам, че прочетох цялата заявка. Както е предложено тук Добавям заглавката max-stale към заявката си, но въпреки това заявките няма да се кешират.   -  person LeDon    schedule 01.04.2014


Отговори (1)


Мисля, че имах подобен проблем. Размерът на кеша е зададен в килобайти и вие го настройвате само на 2024 килобайта. Няма достатъчно място за почти нищо. Опитайте да го зададете на "10L * 1024 * 1024" (10Mb) и вижте дали това помага.

person zivke85    schedule 22.05.2014
comment
Имаш добра гледна точка. Ще опитам по-късно и ще докладвам. В момента използвам някакъв персонализиран хакерски подход, с който не се чувствам удобно. - person LeDon; 22.05.2014