我在SimpleCacheManager / ConcurrentMapCache中使用spring缓存机制。
我正在使用Web服务清除缓存,以下是代码。
for(String cacheName : cacheManager.getCacheNames()){
Cache cache =cacheManager.getCache(cacheName);
if(cache!=null){
cache.clear();
}
}
当我从本地虚拟机上的Rest webservice调用此代码时,我可以看到它清除缓存并可以看到我们在数据库中使用其他服务所做的更改。但是在生产环境中,webservice返回200状态日志。但它仍然显示旧数据。 在生产中我们有2台服务器 我们必须重新启动应用程序以刷新缓存并从数据库中获取最新数据。
答案 0 :(得分:1)
我曾经这样做创建一个用@CacheEvict注释的void方法(allEntries = true),这个注释类似于JSR-107的@CacheRemoveAll。
类似的东西:
@CacheEvict(allEntries=true)
public void evictAll() {
// Do nothing
}
我知道,这很难看,但对我有用。
我的两分钱,避免在生产中使用默认的弹簧缓存管理器,使用更复杂的缓存管理器,如Guava或EhCache。
干杯。