如何根据传递的缓存名称驱逐缓存

时间:2019-03-25 15:52:23

标签: spring-boot caching spring-cache

我正在调用fetchCatchAndClear方法,并在其中传递List,它由缓存名称组成。有人可以帮助我如何遍历列表并根据来自字符串列表的缓存名称清除缓存。另外,如果列表为空,我应该清除所有存在的缓存。

1 个答案:

答案 0 :(得分:1)

遵循.loc的一种相当简单的方法可能是:

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);