在Java中使用CacheManager清除缓存

6
我希望使用JAVA代码清除缓存。
为此,我编写了以下代码:
public void clearCache(){
        CacheManager.getInstance().clearAll();
    }

这段代码正确吗?有什么途径可以确认它运行良好吗?谢谢。

3个回答

6
是的,您的代码清除了缓存管理器中的所有缓存。 Ehcache文档如下所示:void clearAll() 清除CacheManager中所有缓存的内容,但不删除任何缓存。 如果您想测试它,可以将一些元素添加到缓存中,调用clearCache(),然后尝试获取值。get()方法应该只返回null
您无法直接向缓存管理器中添加值,它只管理您在配置文件中声明的缓存(默认情况下为ehcache.xml,您可以在ehcache主页上获取该文件)。您还可以以编程方式添加缓存,即使不知道配置信息也可以。
    CacheManager cacheManager = CacheManager.getInstance();
    Ehcache cache = new Cache(cacheManager.getConfiguration().getDefaultCacheConfiguration());
    cache.setName("cacheName");
    cacheManager.addCache(cache);

为了向缓存中添加值,您需要创建一个Element:Element element = new Element(key, value),并简单调用cache.put(element)。 如果您的缓存变量不再可见,但是您的cacheManager仍然存在,则可以使用cacheManager.getCache(cacheName).put(element)执行相同的操作。
希望这有所帮助...

如何将某物添加到我的缓存中? - mimo
在Linux操作系统中,当我们发送以下命令:free -m时,缓存值为:16796。当我们发送一个清除缓存的命令时,缓存会减少。我想用Java实现同样的功能,这可行吗? - mimo

5
如果您知道缓存名称,可以从CacheManager检索它并使用removeAll()
CacheManager manager = CacheManager.getInstance();
Ehcache cache = manager.getCache(cacheName);
cache.removeAll();

你的方法可行,但它会清除所有缓存对象。

0

有两种方法可以实现这个目标:

  1. 使用dev-console:如果您正在使用捆绑有Terracotta Server Array(TSA)的ehcache企业版,则在安装目录中可以找到dev-console.bat或dev-console.sh文件,根据操作系统的不同选择相应的文件运行,并连接到TSA服务器(如果使用默认安装,则可以连接到localhost:9520),选择命名缓存管理器,然后在概述选项卡中选择清除缓存按钮,并在列表中选择要清除的必需缓存。这将清除所选缓存的缓存内容,并可以在大小选项卡中进行验证,在那里它显示可用内存饼图。
  2. 使用开源ehCache:使用缓存管理器API清除缓存,如问题所述,然后通过从缓存中获取特定键的值是否为空来进行验证。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接