5

我想使用 JAVA 代码清除缓存。

为此,我编写了以下代码:

public void clearCache(){
        CacheManager.getInstance().clearAll();
    }

这段代码正确吗?有没有办法确认它运作良好?谢谢

4

3 回答 3

6

是的,您的代码会清除您在 cacheManager 中的所有缓存。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 element = new Element(key, value)并简单地调用cache.put(element). 如果您的缓存变量不再可见,但您的 cacheManager 是,您可以执行相同的操作cacheManager.getCache(cacheName).put(element)

我希望这有帮助...

于 2013-09-09T12:57:33.837 回答
5

如果您知道缓存名称,则可以从CacheManager检索它并使用removeAll()

CacheManager manager = CacheManager.getInstance();
Ehcache cache = manager.getCache(cacheName);
cache.removeAll();

您的方法有效,但它会清除所有缓存的对象。

于 2014-10-10T14:55:02.647 回答
0

有两种方法可以实现这一点:

  1. 使用 dev-console:如果您使用的是与 Terracotta 服务器阵列 (TSA) 捆绑在一起的企业版 ehcache,则可以在安装目录中找到 dev-console.bat 或 dev-console.sh,具体取决于操作系统,只需运行此文件并连接到 TSA 服务器(如果使用默认安装,那么您可以连接到 localhost:9520 )选择命名的缓存管理器,然后在概览选项卡中选择清除缓存按钮并选择所需的缓存清单中明确。这将清除所选缓存的缓存内容,并且可以在大小选项卡中进行验证,其中显示了可用内存饼图。
  2. 使用开源 ehCache:使用缓存管理器 api 清除缓存,如问题中所述,然后使用从缓存中获取特定键的值来验证是否为空。
于 2014-04-13T15:25:35.037 回答