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

How to evict Cache based on Cache Name passed

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

坚持 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); 或基于注解的 like

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


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