Аннулирование кэша в Ehcache - PullRequest
6 голосов
/ 29 апреля 2011

Я использую Ehcache в Hibernate.

Как я могу уведомить кеш, что база данных изменилась? Как я могу сделать недействительными кэшированные данные? Как я могу программно достичь этого?

Ответы [ 4 ]

10 голосов
/ 27 мая 2011

Что именно означает? Есть 2 способа внести изменения в базу данных: внутри приложения и вне приложения

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

CacheManager manager = CacheManager.getInstance();
cache = manager.getCache(cacheName);
cache.remove(key);

or 

cache.removeAll();

В зависимости от того, как вы настроили ehcache, конечно. Но вам нужно знать имя кеша, в котором хранится объект.

4 голосов
/ 01 июня 2011

Вот как вы можете сделать недействительными все элементы EhCache , не обращая внимания на имена отдельных кэшей:

CacheManager manager = CacheManager.getInstance();

String[] names = manager.getCacheNames();

for (String name : names)
{
    Cache cache = manager.getCache(name);

    cache.removeAll();
}
1 голос
/ 13 ноября 2018

Установить срок действия кэша, чтобы данные обновлялись как или чаще, чем изменяется база данных.

Также вы можете обновлять в кэше только те элементы, которые изменяются в базе данных.

1 голос
/ 04 ноября 2015

Попробуйте:

CacheManager.create().clearAll()

Это очистит все кэши в CacheManager.

Чтобы очистить только один конкретный кеш, получите его из диспетчера кеша и удалите все элементы:

CacheManager cacheManager = CacheManager.create();
Ehcache cache = cacheManager.getEhcache(cacheConfiguration.getName());
cache.removeAll();    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...