Java ehcache磁盘存储

时间:2010-09-17 04:00:35

标签: java ehcache

我正在开发应用程序,我需要生成并经常访问数千个文件。出于磁盘空间使用的原因,我只想在任何给定时间保留固定数量的这些文件。例如,文件正被写入C:\ my-folder。一旦我的文件夹达到1000个文件,如果我需要保存一个新文件,我想从我的文件夹中删除LRU文件。使用ehcache(或任何缓存工具)可能是这样的吗?我以为我可以在ehcache中使用磁盘存储,但每当我在缓存上调用get时,它只会查看内存中的密钥而不是磁盘中的密钥。

我的代码的一些代码段显示在这里:

    // create the cache
    CacheManager cm = CacheManager.create();
    String name = getName();
    CacheConfiguration config = new CacheConfiguration(name, 1)
            .maxElementsOnDisk(2000).diskPersistent(true)
            .overflowToDisk(true).eternal(true).diskStorePath(name)
            .memoryStoreEvictionPolicy(MemoryStoreEvictionPolicy.LRU);
    Cache cache = new Cache(config);
    cm.addCache(cache);

    // I do a couple of puts
    cache.put(new Element("key1", val1));
    cache.put(new Element("key2", val2));    
    cache.flush();

    // now key1 is no longer in the cache (since max memory size is 1), but I'd like to look on disk since I have set maxElementsOnDisk to 2000
    Element el = cache.get("key1");

谢谢,

杰夫

1 个答案:

答案 0 :(得分:2)

这似乎不是你正在使用EH Cache来实现它的潜力..在磁盘上存储1000个项目然后旋转掉最后一个使用的项目。 EH Cache更适合在内存中存储内容,并在内存填满时使用磁盘作为备份。

我个人只是自己动手。您有非常具体的业务规则。存储1000个项目。然后,当您准备存储文件1001时,您可以找到要删除的文件。如果您在操作系统级别打开了访问时间,则可以执行单个linux命令来删除最近访问过的文件...通常您不会对linux中的文件使用访问时间,但这会使您的问题变得容易在OS级解决..