Быть в спящем режиме кэш запроса, автоматически обновленный на внешнем обновлении?

Я создаю сервис, который имеет доступ только для чтения к базе данных. У меня есть кэш запроса, и второй кэш уровня включил (режим READ_ONLY) в В спящем режиме для ускорения сервиса, как таблицы, получаемые доступ изменение редко.

Мой вопрос, если кто-то входит в DB и изменяет таблицы вручную (т.е. за пределами В спящем режиме), кэш распознает автоматически, что должен быть очищен? В кэше существует ли ограничение по времени?

12
задан Pascal Thivent 9 May 2010 в 14:03
поделиться

2 ответа

Нет, кэш не собирается сканировать базу данных для вас, чтобы волшебным образом обновить себя, когда основные данные изменяются. Изменения, которые не проходят через кэш L2, не появляются в нем. Сколько времени займет тайм-аут и т.д., зависит от вашего провайдера и настроек по умолчанию. Похоже, что по умолчанию ehcache.xml настроен на 2 минуты.

8
ответ дан 2 December 2019 в 20:16
поделиться

Если вы не воспользуетесь API Hibernate для внесения изменений, кеш второго уровня не получит уведомления и изменения не будут видимый. Обычный способ справиться с этой ситуацией - программно исключить соответствующие объекты из кэша второго уровня для принудительного обновления. SessionFactory предоставляет методы, позволяющие это сделать. Из раздела 19.3.Управление кешами документации:

Для кеша второго уровня существуют методы, определенные на SessionFactory для удаления кэшированного состояния { Экземпляр {1}}, весь класс, коллекция экземпляр или роль всей коллекции.

 sessionFactory.evict (Cat.class, catId); // выселить конкретный Cat 
sessionFactory.evict (Cat.class); // выселить всех кошек 
sessionFactory.evictCollection ("Cat.kittens", catId); // выселить определенную 
 // коллекцию котят 
sessionFactory.evictCollection ("Cat.kittens"); // выселить все коллекции котят 
 
8
ответ дан 2 December 2019 в 20:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: