1

大家好, 我目前的要求是使用 EhCache 存储和读取记录。我是 EhCache 实现的新手。我已阅读 EhCache 文档并开始实施。我已经完成了记录插入部分和阅读部分。插入记录时,将创建 *.data nd *.index 文件。以下是代码。

public class Driver
    {
    public static void main(String[] args) {
    CacheManager cm = CacheManager.create("ehcache.xml");
    Cache cache = cm.getCache("test");
    // I do a couple of puts
    for(int i=0;i<10;i++){
        cache.put(new Element("key1", "val1"));
            cache.flush();
    }
    System.out.println(cache.getKeys());
    for(int i=0;i<10;i++){
        Element el = cache.get("key"+i);
        System.out.println(el.getObjectValue());
    }
    cm.shutdown();  
    }
    }

现在问题是cm.shutdown()。如果我评论这一行并注释掉插入部分并运行程序意味着,无法检索记录并且 *.index 文件也被删除。所以在实际情况下,如果程序突然停止意味着我们无法在启动后读取记录。我想知道为什么文件被删除以及为什么在这种情况下我无法读取记录...控制台中出现的异常是

net.sf.ehcache.util.SetAsList@b66cc
        Exception in thread "main" java.lang.NullPointerException
            at Driver.main(Driver.java:29)...

需要任何输入请..

4

1 回答 1

1

你正在做的是正确的,预期的行为也是正确的。缓存通常用于通过快速提供常用数据来提高应用程序性能,同时避免昂贵的数据存储之旅。

并非所有应用程序都需要在系统关闭后保留缓存 - 这是您看到的默认行为(大多数应用程序将在应用程序启动或请求开始时构建缓存)。您正在缓存的数据在堆中 - 一旦您的 JVM 死机 - 缓存就消失了。现在您想在重新启动后坚持下去吗?有可用的选项。看这里

我正在从同一页面复制代码片段:

DiskStoreConfiguration diskStoreConfiguration = new DiskStoreConfiguration();
diskStoreConfiguration.setPath("/my/path/dir");
// Already created a configuration object ...
configuration.addDiskStore(diskStoreConfiguration);
// By adding configuration for storing the cache in a file - you are not using default cache manager
CacheManager mgr = new CacheManager(configuration);

此外,您还必须按照此处的说明配置持久性选项

再次从链接复制代码片段:

<cache>
   <persistence strategy=”localRestartable” synchronousWrites=”true”/>
</cache>

希望这可以帮助!

于 2013-06-14T10:08:40.317 回答