在Apache JSC缓存中找不到存储的元素

时间:2014-07-07 16:33:56

标签: apache caching configuration

我正在使用JSC缓存来存储我的应用程序正在使用的大量对象(超过10.000.000) 我写了一个快速测试来检查配置,虽然这些元素似乎存储在缓存中,但是当我试图检索它们时,大多数都不存在。 我可以使用区域缓存和辅助光盘缓存,如我的配置文件

所示
jcs.region.testCache1=DC
jcs.region.testCache1.cacheattributes=org.apache.jcs.engine.CompositeCacheAttributes
jcs.region.testCache1.cacheattributes.MaxObjects=1000
jcs.region.testCache1.cacheattributes.MemoryCacheName=org.apache.jcs.engine.memory.lru.LRUMemoryCache
jcs.region.testCache1.cacheattributes.UseMemoryShrinker=true
jcs.region.testCache1.cacheattributes.MaxMemoryIdleTimeSeconds=3600
jcs.region.testCache1.cacheattributes.ShrinkerIntervalSeconds=60
jcs.region.testCache1.cacheattributes.MaxSpoolPerRun=500
jcs.region.testCache1.elementattributes=org.apache.jcs.engine.ElementAttributes
jcs.region.testCache1.elementattributes.IsEternal=true

jcs.auxiliary.DC=org.apache.jcs.auxiliary.disk.indexed.IndexedDiskCacheFactory
jcs.auxiliary.DC.attributes=org.apache.jcs.auxiliary.disk.indexed.IndexedDiskCacheAttributes
jcs.auxiliary.DC.attributes.DiskPath=${user.dir}/jcs_swap
jcs.auxiliary.DC.attributes.MaxPurgatorySize=10000
jcs.auxiliary.DC.attributes.MaxKeySize=-1

我将永恒的attritbute设置为'true',以便元素永远不会过期和删除,将元素定期放入DiscCache的内存缩减器,以及MaxKeySize设置为-1的DiscCache,表明它可以接待任何数量的啤酒。你看到任何misconiguratin?

当我使用具有中等数量元素(~10,000)的此配置时,一切正常。当我使用超过1.000.000时,我无法检索大部分元素。

1 个答案:

答案 0 :(得分:0)

经过一些测试,我找到了自己的解决方案。我通过执行以下snipset

在缓存中插入元素
for(Integer i=0; i<2000000; i++) {

            TestElement element = new TestElement();
            element.setId(i);
            element.setValue("element" + i);
            cache.add(i, element);            
}

这导致了麻烦,因为缓存没有时间来清空磁盘缓存中的元素。但是,如果我在添加新元素之前使用sleep几个msecs(这在实时环境中更有意义),一切都按预期工作