我注意到,根据文档,要创建缓存,您必须实例化或获取 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/如果这可行,但不是实现它的正确方法,为什么初始化是公共(public)的?它可以具有默认访问权限。
最佳答案
Ehcache 2.x 需要一个 CacheManager
来提供缓存。这是记录并推荐的使用缓存的方法。未链接到 CacheManager
的 Cache
可能会导致各种问题,尤其是对于更高级的功能。
CacheManager 负责的一些功能:
缓存
存储库缓存
初始化- 包括缓存及其配置假定已正确设置的一些双向链接
- 用于堆字节大小调整的 SizeOf 引擎提供程序
- 交易管理器提供商
- 统计执行器提供商
- ARC 池提供商
能够构造和初始化Cache
的原因在于历史原因(API,Cache
是一个类而不是一个接口(interface))和向后保留的意愿兼容性。
Ehcache 3.x 将带有用户管理缓存的概念,即不链接到CacheManager
的缓存。它们非常适合您只需要 put/get/evict/expiry 功能的用例。
关于java - 我们总是需要使用CacheManager吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34283395/