我们是否总是需要使用CacheManager?
问题描述:
我注意到,根据文档,创建一个缓存,你必须实例化或获得一个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是公开的?它可以有默认访问权限。
答
的Ehcache 2.x的要求CacheManager
,以提供高速缓存。这是使用缓存的记录和建议的方式。 A Cache
未链接到CacheManager
可能会导致各种问题,特别是对于更高级的功能。
一些,它们是CacheManager
责任的特点:
Cache
小号
Cache
初始化
-
- 包括缓存一些双向链接及其配置假设是正确的设置
- 中SizeOf工程国家统计局提供的上堆字节大小
- 事务管理器提供商
- 统计执行人提供
- ARC池提供商
之所以能够构建并初始化一个Cache
位于历史原因(API,Cache
是一个类而不是一个接口)以及保持向后兼容性的意愿。
Ehcache 3.x将带有用户管理的缓存的概念,即缓存未链接到CacheManager
。它们将非常适合您只需要put/get/evict/expiry功能的用例。
当使用跨节点多个高速缓存,CacheManagers允许配置CacheManagerPeerListeners,CacheManagerPeerProviders等,这是在传播任何高速缓存或高速缓存入口的更改,以确保它们都在同步或防止数据失效是有用的。实时场景 - 使用Ehcache作为跨多个节点部署的休眠二级缓存。 –
谢谢你的回答@Louis。我同意这是ehCache 2.x文档所陈述的。我想要了解的是** CacheManager **的责任。是否可以举出一些问题? (即驱逐,磁盘溢出,持久性......) – martinchin2289
列出一些责任 –