2015-12-15 67 views
2

我注意到,根据文档,创建一个缓存,你必须实例化或获得一个CacheManager并添加缓存。我们是否总是需要使用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 /如果这将工作,但不是实现它的正确方法,为什么INITIALISE是公开的?它可以有默认访问权限。

回答

2

的Ehcache 2.x的要求CacheManager,以提供高速缓存。这是使用缓存的记录和建议的方式。 A Cache未链接到CacheManager可能会导致各种问题,特别是对于更高级的功能。

一些,它们是CacheManager责任的特点:

库的 Cache小号
  • Cache初始化
      • 包括缓存一些双向链接及其配置假设是正确的设置
    • 中SizeOf工程国家统计局提供的上堆字节大小
    • 事务管理器提供商
    • 统计执行人提供
    • ARC池提供商

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

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

  • +0

    当使用跨节点多个高速缓存,CacheManagers允许配置CacheManagerPeerListeners,CacheManagerPeerProviders等,这是在传播任何高速缓存或高速缓存入口的更改,以确保它们都在同步或防止数据失效是有用的。实时场景 - 使用Ehcache作为跨多个节点部署的休眠二级缓存。 –

    +0

    谢谢你的回答@Louis。我同意这是ehCache 2.x文档所陈述的。我想要了解的是** CacheManager **的责任。是否可以举出一些问题? (即驱逐,磁盘溢出,持久性......) – martinchin2289

    +0

    列出一些责任 –