我想使用JAVA代码清除缓存。
为了这个目标,我编写了这段代码:
public void clearCache(){
CacheManager.getInstance().clearAll();
}
这段代码正确吗? 有没有办法确认其效果良好? 谢谢
是的,您的代码会清除您的缓存管理器中的所有缓存。 ehcache 文档说:
void clearAll()
Clears the contents of all caches in the CacheManager, but without removing any caches
如果您想测试它,您可以向缓存添加一些元素,调用
clearCache()
,然后尝试获取值。 get()
-方法应该只返回 null
。
您不能直接在cacheManager中添加值,它只是管理您在配置文件中声明的缓存。 (默认情况下它是 ehcache.xml,您可以在 ehcache 主页上获取它。) 即使不了解任何配置,您也可以通过编程方式添加缓存。
CacheManager cacheManager = CacheManager.getInstance();
Ehcache cache = new Cache(cacheManager.getConfiguration().getDefaultCacheConfiguration());
cache.setName("cacheName");
cacheManager.addCache(cache);
要将值添加到缓存,您必须创建一个元素:
Element element = new Element(key, value)
,只需拨打 cache.put(element)
。
如果您的缓存变量不再可见,但您的缓存管理器可见,您可以使用 cacheManager.getCache(cacheName).put(element)
执行相同操作
我希望这有帮助...
如果您知道缓存名称,则可以从 CacheManager 检索它并使用 removeAll()。
CacheManager manager = CacheManager.getInstance();
Ehcache cache = manager.getCache(cacheName);
cache.removeAll();
您的方法有效,但它会清除所有缓存的对象。
有两种方法可以实现这一目标:
上面的答案提到了Ehcache的
net.sf.ehcache.CacheManager
。org.springframework.cache.CacheManager
是 Spring 接口。@Autowired
CacheManager cacheManager;
public void clearAllCaches() {
cacheManager.getCacheNames().forEach(name -> cacheManager.getCache(name).clear());
}