Как выселить кеш на основе переданного имени кеша - PullRequest
0 голосов
/ 25 марта 2019

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

1 Ответ

1 голос
/ 25 марта 2019

Довольно простой подход, который придерживается org.springframework.cache.CacheManager, может быть следующим:

List<String> cacheNames = List.of("aCache", "anotherCache"); // the list you are passing in
CacheManager cacheManager = new SimpleCacheManager(); // any cache manager you are injecting from anywhere

// a simple iteration, exception handling omitted for readability reasons
cacheNames.forEach(cacheName -> cacheManager.getCache(cacheName).clear());

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

CacheManager cacheManager = new SimpleCacheManager();
Collection<String> cacheNames = cacheManager.getCacheNames();

cacheNames.forEach(cacheName -> cacheManager.getCache(cacheName).clear());

Если вы просто хотите удалить одну запись в кэше, вы можете сделать это программным путем: cacheManager.getCache(cacheName).evict(cacheKey); или на основе аннотаций, например

@CacheEvict(value = "yourCacheName", key = "#cacheKey")
public void evictSingleCacheValue(String cacheKey) {
}


@CacheEvict(value = "yourCacheName", allEntries = true)
public void evictAllCacheValues() {
}
...