Как обновить кеш второго уровня?

Как принудительно перечитать данные БД (без вытеснения кеша второго уровня перед чтением), а затем поместить их в кеш.

Вариант использования следующий:

Есть сервис, который использует словарные данные. Сервис испытывает высокую нагрузку, поэтому производительность является обязательным условием. Я хотел бы, чтобы данные словаря всегда были доступны в кеше второго уровня для службы. Данные словаря могут быть изменены извне, поэтому кэш необходимо периодически обновлять.

Есть ли возможность «обновить» кеш второго уровня таким образом, чтобы другие клиенты SessionFactory не вызывали попадания в БД (получали старые элементы во время чтения обновленных данных).

ehcache используется в качестве поставщика кеша, но его можно разумно изменить.


person Andrey    schedule 29.08.2011    source источник
comment
Как вы реализовали CacheMode.REFRESH? Вы только что установили его в сеансе, и Hibernate автоматически обновляется?   -  person Jose    schedule 09.04.2014
comment
@JoseChavez Я сделал: session.setCacheMode(CacheMode.REFRESH), а затем сделал запрос через Hibernate к данным, которые мне нужно обновить в этом сеансе. docs.jboss .org/hibernate/core/3.6/javadocs/org/hibernate/   -  person Andrey    schedule 10.04.2014


Ответы (1)


Время от времени, чтобы вызвать чтение в БД, вы можете установить CacheMode в сеансе на REFRESH - данные будут извлекаться из БД для этого одного клиента, а любые обновления добавляются в кеш второго уровня. Другие клиенты, выполняющие запросы в обычном режиме кеша, будут читать из кеша второго уровня, не затрагивая файл db.

См. раздел CacheMode.

person mdma    schedule 29.08.2011
comment
Спасибо! Не знаю, как я не нашел это сам. - person Andrey; 30.08.2011