3

我们计划在我们的应用程序中使用一些缓存机制,并在与许多其他缓存解决方案进行比较研究后选择了 Java 缓存系统(JCS)。当我使用外部配置 (cache.ccf) 来定义缓存区域及其属性(如 maxlife、ideltime 等)时,一切都很好。

但是要求更改为具有动态缓存区域,即我们需要在运行时定义缓存区域及其属性。我无法找到有关此操作的更多详细信息或示例。我在运行时成功创建了缓存区域(使用下面的方法签名)。

ICompositeCacheAttributes  cattr=..
IElementAttributes attr = new ElementAttributes();
attr.setIsEternal(false);
attr.setMaxLifeSeconds( maxLife );    
defineRegion(name,  cattr,attr);

但问题是,IElmentAttributes 没有设置为缓存。我对 JCS 的来源进行了研究,发现attr从未设置过。这是未使用的参数!有点怪

经过一番谷歌搜索后,我发现以下选项可以手动设置属性,但仍然无效

 IElementAttributes attr = new ElementAttributes();
 attr.setIsEternal(false);
 attr.setMaxLifeSeconds( maxLife );
 jcs.setDefaultElementAttributes(attr);

我想要的只是为创建的区域设置 maxLifeSeconds 。

4

2 回答 2

2

Sample code here

Properties props = new Properties();
//
// Default cache configs
//
props.put("jcs.default", "");
props.put("jcs.default.cacheattributes","org.apache.jcs.engine.CompositeCacheAttributes");
props.put("jcs.default.cacheattributes.MaxObjects","1000");
props.put("jcs.default.cacheattributes.MemoryCacheName", "org.apache.jcs.engine.memory.lru.LRUMemoryCache");
props.put("jcs.default.cacheattributes.UseMemoryShrinker", "true");
props.put("jcs.default.cacheattributes.MaxMemoryIdleTimeSeconds", "3600");
props.put("jcs.default.cacheattributes.ShrinkerIntervalSeconds", "60");
props.put("jcs.default.cacheattributes.MaxSpoolPerRun", "500");

//
// Region cache
//
props.put("jcs.region.myregionCache", "");
props.put("jcs.region.myregionCache.cacheattributes", "org.apache.jcs.engine.CompositeCacheAttributes");
props.put("jcs.region.myregionCache.cacheattributes.MaxObjects", "1000");
props.put("jcs.region.myregionCache.cacheattributes.MemoryCacheName", "org.apache.jcs.engine.memory.lru.LRUMemoryCache");
props.put("jcs.region.myregionCache.cacheattributes.UseMemoryShrinker", "true");
props.put("jcs.region.myregionCache.cacheattributes.MaxMemoryIdleTimeSeconds", "3600");
props.put("jcs.region.myregionCache.cacheattributes.ShrinkerIntervalSeconds", "60");
props.put("jcs.region.myregionCache.cacheattributes.MaxSpoolPerRun", "500");
props.put("jcs.region.myregionCache.cacheattributes.DiskUsagePatternName", "UPDATE");
props.put("jcs.region.myregionCache.elementattributes", "org.apache.jcs.engine.ElementAttributes");
props.put("jcs.region.myregionCache.elementattributes.IsEternal", "false");

...


// Configure
CompositeCacheManager ccm = CompositeCacheManager.getUnconfiguredInstance();
ccm.configure(props);

// Access region
CompositeCache myregionCache =  ccm.getCache("myregionCache");

...
于 2015-01-11T19:29:58.270 回答
2

我找到了解决问题的方法,当您将数据放入缓存时,我们需要设置属性。看到有兴趣的人的实现,

JCS jcs = JCS.getInstance("REGION");
IElementAttributes attr = new ElementAttributes();
attr.setIsEternal(false);
attr.setMaxLifeSeconds( maxLife );
jcs.put("Key",data, attr);
于 2012-10-19T17:43:31.207 回答