ehcache持续存在磁盘问题

我想用Java中的ehcache做一些我认为应该非常简单的事情,但是我花了很多时间使自己的文档感到沮丧…

  1. 将值写入磁盘持久性缓存。关掉。

  2. 重新启动并读取该值。

这是我的Java函数:

private static void testCacheWrite() {

// create the cache manager from our configuration

URL url = TestBed.class.getClass().getResource("/resource/ehcache.xml");

CacheManager manager = CacheManager.create(url);

// check to see if our cache exits, if it doesn't create it

Cache testCache = null;

if (!manager.cacheExists("test")) {

System.out.println("No cache found. Creating cache...");

int maxElements = 50000;

testCache = new Cache("test", maxElements,

MemoryStoreEvictionPolicy.LFU, true, null, true, 60, 30,

true, Cache.DEFAULT_EXPIRY_THREAD_INTERVAL_SECONDS, null);

manager.addCache(testCache);

// add an element to persist

Element el = new Element("key", "value");

testCache.put(el);

testCache.flush();

System.out.println("Cache to disk. Cache size on disk: " +

testCache.getDiskStoreSize());

} else {

// cache exists so load it

testCache = manager.getCache("test");

Element el = testCache.get("key");

if (null == el) {

System.out.print("Value was null");

return;

}

String value = (String) el.getObjectValue();

System.out.println("Value is: " + value);

}

manager.shutdown();

}

这是我的缓存配置(ehcache.xml):

<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:noNamespaceSchemaLocation="../config/ehcache.xsd">

<diskStore path="C:/mycache"/><!-- java.io.tmpdir -->

<defaultCache

maxElementsInMemory="10000"

eternal="true"

timeToIdleSeconds="120"

timeToLiveSeconds="120"

overflowToDisk="true"

maxElementsOnDisk="10000000"

diskPersistent="true"

diskExpiryThreadIntervalSeconds="120"

memoryStoreEvictionPolicy="LRU" />

</ehcache>

即使我在第一次运行后在磁盘上看到test.index和test.data文件,此函数的输出始终是以下内容(它似乎从未从磁盘加载缓存):

找不到缓存。正在创建缓存…

缓存到磁盘。磁盘上的缓存大小:2

我一定在这里做些愚蠢的事,但我不确定是什么!

回答:

好的,我要做的就是使用配置文件配置缓存。这是更新的配置:

<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 

xsi:noNamespaceSchemaLocation="../config/ehcache.xsd">

<diskStore path="C:/mycache" />

<defaultCache

maxElementsInMemory="10000"

eternal="true"

timeToIdleSeconds="120"

timeToLiveSeconds="120"

overflowToDisk="true"

maxElementsOnDisk="10000000"

diskPersistent="true"

diskExpiryThreadIntervalSeconds="120"

memoryStoreEvictionPolicy="LRU" />

<cache

name="test"

maxElementsInMemory="500"

eternal="true"

overflowToDisk="true"

timeToIdleSeconds="300"

timeToLiveSeconds="600"

diskPersistent="true"

diskExpiryThreadIntervalSeconds="1"

memoryStoreEvictionPolicy="LFU" />

</ehcache>

因此,基本上我没有使用构造函数来定义缓存。

我想这会起作用,但是我仍然想知道为什么以编程方式定义的缓存不能持久化在磁盘上(特别是因为它们仍然被写入磁盘!)。

感谢您的评论。

以上是 ehcache持续存在磁盘问题 的全部内容, 来源链接: utcz.com/qa/397396.html

回到顶部