我注意到,根据文档,要创建一个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 /如果这行得通,但不是实现它的正确方法,那么为什么要公开初始化?它可能具有默认访问权限。

最佳答案

Ehcache 2.x需要CacheManager才能提供缓存。这是记录和推荐的使用缓存的方法。未链接到CacheCacheManager可能会引起各种问题,尤其是对于更高级的功能。

CacheManager的某些功能:


Cache s的存储库
Cache初始化


包括一些双向链接,高速缓存及其配置假定已正确设置

SizeOf引擎提供程序,用于堆上字节大小调整
交易经理提供者
统计执行者提供者
ARC池提供程序


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

Ehcache 3.x将带有用户管理的缓存的概念,即未链接到CacheManager的缓存。它们将非常适合只需要放置/获取/退出/到期功能的用例。

关于java - 我们是否总是需要使用CacheManager?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34283395/

10-10 22:40