Ответ 1
Из ваших вопросов я вижу, что вы смешиваете кеширование на стороне клиента (http) с кешированием на стороне сервера (база данных). Я думаю, что основной причиной этого является другое поведение, которое вы наблюдали в firefox и chrome, сначала я попытаюсь очистить этот
Когда я вызываю свой веб-сервис с помощью Firefox Poster, в течение 60 секунд он казалось намного быстрее на 2-м, 3-м звонках и т.д., пока он не прошел 60 секунд. Однако, когда я вставляю URI в браузер (Chrome), он казалось, замедлял 5 секунд каждый раз.
Пример:
@Path("/book")
public Response getBook() throws InterruptedException {
String book = " Sample Text Book";
TimeUnit.SECONDS.sleep(5); // thanks @fge
final CacheControl cacheControl = new CacheControl();
cacheControl.setMaxAge((int) TimeUnit.MINUTES.toSeconds(1));
return Response.ok(book).cacheControl(cacheControl).build();
}
У меня есть успокаивающий webservice, и URL-адрес для этого
http://localhost:8780/caching-1.0/api/cache/book - GET
FireFox:
В первый раз, когда я обратился к URL-адресу, браузер отправил запрос на сервер и получил ответ с заголовками управления кэшем.
Второй запрос через 60 секунд (с помощью Enter): На этот раз firefox не отправился на сервер, чтобы получить ответ, вместо этого его загруженные данные из кеша
Третий запрос через 60 секунд (с помощью Enter):
на этот раз firefox сделал запрос на сервер и получил ответ.
Четвертый запрос с использованием Refresh (F5 или ctrl F5):
Если я обновляю страницу (вместо того, чтобы нажимать enter) с 60 секундами предыдущего запроса, Firefox не загружал данные из кеша, а сделал запрос на сервер со специальным заголовком в запросе
Chrome:
Второй запрос за 60 секунд (с помощью Enter): на этот раз хром отправил запрос на сервер вместо загрузки данных из кеша, а в запросе добавил заголовок cache-control = "max-age = 0"
Агрегирование результатов:
Поскольку хром реагирует иначе, чтобы вводить клик, вы видели другое поведение в firefox и chrome, его ничего не делает с jax-rs или вашим HTTP-ответом. Чтобы суммировать клиентов (firefox/chrome/safari/opera), будут кэшировать данные за указанный период времени в управлении кешем, клиент не будет делать новый запрос на сервер до тех пор, пока не истечет время или пока не произойдет обновление силы.
Надеюсь, это разъяснит ваши вопросы 1,2,3.
4. В этом учебнике учебник по кешированию JAX-RS: как кэширование на самом деле Работа? Первая строка всегда извлекает данные из базы данных:
Запишите myBook = getBookFromDB (id);
Итак, как он считается кэшированным? Если код не выполняется в сверху/вниз.
В приведенном ниже примере речь идет не о минимизации вызовов базы данных, а о сохранении ширины полосы по сети, у Клиента уже есть данные и проверка с сервером (повторная аттестация), если данные обновляются или нет, если обновление данных отсутствует ответ вы отправляете фактическую сущность.