Java 我们是否总是需要使用CacheManager?

Java 我们是否总是需要使用CacheManager?,java,ehcache,Java,Ehcache,我注意到,根据文档,要创建缓存,必须实例化或获取CacheManager并将缓存添加到其中 singletonManager = CacheManager.create(); Cache memoryOnlyCache = new Cache("testCache", 5000, false, false, 5, 2); singletonManager.addCache(memoryOnlyCache); Cache test = singletonManager.getCache("test

我注意到,根据文档,要创建缓存,必须实例化或获取CacheManager并将缓存添加到其中

singletonManager = CacheManager.create();
Cache memoryOnlyCache = new Cache("testCache", 5000, false, false, 5, 2);
singletonManager.addCache(memoryOnlyCache);
Cache test = singletonManager.getCache("testCache"); 
但是,下面的代码似乎正在工作

public class MyCache {

    private static Cache cache = null;

    ...

    private MyCache() {
        cache = new Cache(cacheName, 200, MemoryStoreEvictionPolicy.LFU, false, null, false, timeToLiveSeconds, 0L, false, 0, null);
        cache.initialise();
    }
}
因此,我的问题是:

1/为什么这样做有效?我验证了我可以添加或删除条目,并且缓存已过期


2/如果这可行,但不是正确的实施方式,为什么初始化是公开的?。它可能具有默认访问权限。

Ehcache 2.x需要一个
CacheManager
来提供缓存。这是使用缓存的有文档记录的推荐方法。未链接到
CacheManager
缓存
可能会导致各种问题,尤其是对于更高级的功能

缓存管理器负责的一些功能:

  • 缓存的存储库
    s
  • 缓存
    初始化
    • 包括一些双向链接,缓存及其配置假定已正确设置
  • 用于堆上字节大小调整的SizeOf引擎提供程序
  • 事务管理器提供程序
  • 统计执行程序提供程序
  • 弧池提供程序
能够构造和初始化
缓存
的原因在于历史原因(API,
缓存
是类而不是接口)以及保持向后兼容性的意愿


Ehcache 3.x将附带用户管理缓存的概念,即不链接到
CacheManager
的缓存。它们非常适合只需要put/get/execute/expiration功能的用例。

当跨节点使用多个缓存时,CacheManagers允许配置CacheManagerPeerListeners,CacheManagerPeerProviders等,用于传播任何缓存或缓存项更改,以确保它们都同步或防止数据过时。实时场景-使用Ehcache作为跨多个节点部署的hibernate二级缓存。感谢您的回答@Louis。我同意这是Ehcache2.x文档中的说明。我想了解的是CacheManager的职责是什么。能否列举一些问题?(即逐出、磁盘溢出、持久化等)列出了一些责任