Как работают кеши OkHttp?

Недавно я изменил свою существующую реализацию создания нового клиента для каждого запроса на один стандартный одноэлементный клиент.

Теперь, когда я начал читать документы, я обнаружил, что также используется вещь, называемая кешем. Был некоторый контент, в котором говорилось, что наличие нескольких кешей, пытающихся получить доступ к одному и тому же каталогу кеша, может привести к тому, что они наткнутся друг на друга и вызовут сбои.

Документы, на которые я смотрю, находятся в их репозитории github:

https://github.com/square/okhttp/wiki/Recipes

Мои вопросы:

Я специально не устанавливаю какой-либо кеш или управление кешем для своего клиента. Всего несколько значений времени ожидания и пул соединений. Будет ли какое-либо кеширование по умолчанию, если я буду использовать новый объект запроса и ответа для каждого вызова, который я делаю?

client = new Okhttpclient.Builder()
              . connectTimeout (10000,TimeUnit.MILLISECONDS)
              .readTimeout(15000,TimeUnit.MILLISECONDS)
              . connectionPool (new ConnectionPool ())
              .build();

Вышеупомянутый клиент установлен как singleton и возвращается ко всем вызывающим сервлетам. Запрос создается как

  Request req = new Request.Builder()
                  .url(someurl)
                  .get()
                  .build();

  Response res = client.newCall(req).execute();

Если да, то будут ли проблемы, как упомянутая часть топания. Мне вообще не нужно кеширование, так как в основном я просто пишу материал на другой сервер, и когда я читаю, мне нужно, чтобы это были текущие значения, а не кеширование... Так что мне нужно явно установить кеш -control установлено значение force-network, или мой параметр по умолчанию не будет таким же?

EDIT: это выдержка из кэширования ответов часть документов

Чтобы кешировать ответы, вам понадобится каталог кеша, который вы можете читать и записывать, а также ограничение на размер кеша. Каталог кеша должен быть закрытым, и ненадежные приложения не должны иметь возможность читать его содержимое!

Одновременный доступ нескольких кешей к одному и тому же каталогу кеша является ошибкой. Большинство приложений должны вызывать new OkHttpClient() ровно один раз, настраивать его со своим кешем и везде использовать один и тот же экземпляр. В противном случае два экземпляра кеша будут топать друг друга, повреждать кеш ответов и, возможно, вызывать сбой вашей программы.


person Kushan    schedule 03.03.2018    source источник
comment
Пожалуйста, предоставьте ссылки на документы, на которые вы ссылаетесь. Интерпретации различаются.   -  person Abhijit Sarkar    schedule 03.03.2018
comment
Готово, размещена ссылка на упомянутые документы   -  person Kushan    schedule 03.03.2018
comment
Где находится раздел кэширования? Не слишком ли сложно быть конкретным, чтобы людям, пытающимся помочь, не приходилось получать информацию, как выдергивать зубы?   -  person Abhijit Sarkar    schedule 03.03.2018
comment
Там... Я разместил часть, которую я прочитал, и которая теперь поставила меня перед дилеммой.   -  person Kushan    schedule 03.03.2018


Ответы (1)


Каталог кеша OkHttp задается для каждого экземпляра клиента. Документ говорит вам, что вы не должны настраивать несколько клиентов для использования одного и того же каталога кеша. Кэширование должно быть включено явно и не включено во фрагменте кода в вашем вопросе.

Настроив кэширование на экземпляре клиента, вы можете управлять кэшированием ответов для каждого запроса. См. раздел Кэш.

person Abhijit Sarkar    schedule 03.03.2018
comment
Так что мне не нужно, чтобы FORCE_NETWORK был установлен в управлении кешем, и в настоящее время мое кеширование отключено? - person Kushan; 03.03.2018
comment
@Kushan Я не понимаю вопроса; вы сами это понимаете? Если кеширование не включено, что вы форсируете в сети? - person Abhijit Sarkar; 03.03.2018
comment
Да, я не очень понял, что бы сделал флаг. Понял. Думаю, моя нынешняя система будет работать так, как я задумал. Всегда не кэширует данные. - person Kushan; 03.03.2018
comment
Да, извините, было минимальное время, до которого мне не разрешили его принять. Это потрясающе. Спасибо :) я склонен параноидально относиться к вещам, которых не понимаю, вы довольно хорошо все прояснили - person Kushan; 03.03.2018