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

时间:2015-12-15 07:33:14

标签: java ehcache

我注意到根据文档,要创建Cache,您必须实例化或获取CacheManager并向其添加Cache。

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 /如果这可行,但不是实施它的正确方法,为什么初始化是公开的?它可以有默认访问权限。

1 个答案:

答案 0 :(得分:2)

Ehcache 2.x需要CacheManager才能提供缓存。这是使用缓存的记录和推荐方法。未与Cache相关联的CacheManager可能会导致各种问题,尤其是对于更高级的功能。

CacheManager

负责的一些功能
  • Cache s
  • 的存储库
  • Cache初始化
    • 包含一些缓存及其配置假设已正确设置的双向链接
  • 用于堆上字节大小调整的SizeOf引擎提供程序
  • 交易管理提供商
  • 统计执行者提供者
  • ARC池提供商

能够构建和初始化Cache的原因在于历史原因(API,Cache是一个类而不是接口)以及保持向后兼容性的意愿。

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