在java中使用cacheManager清除缓存

问题描述 投票:0回答:4

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

为了这个目标,我编写了这段代码:

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

这段代码正确吗? 有没有办法确认其效果良好? 谢谢

java ehcache
4个回答
6
投票

是的,您的代码会清除您的缓存管理器中的所有缓存。 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)

执行相同操作

我希望这有帮助...


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 清除缓存,如问题中所述,然后使用从缓存中获取特定键来验证是否为空。

0
投票

上面的答案提到了Ehcache的

net.sf.ehcache.CacheManager

通常情况下
org.springframework.cache.CacheManager
是 Spring 接口。
要清除所有内容,您需要注入它并清除所有命名缓存:

@Autowired
CacheManager cacheManager;

public void clearAllCaches() {
  cacheManager.getCacheNames().forEach(name -> cacheManager.getCache(name).clear());
}

请参阅 Spring Boot 中的缓存驱逐

© www.soinside.com 2019 - 2024. All rights reserved.