Java Ehcache 磁盘存储

3
我正在开发一个应用程序,需要生成并频繁访问成千上万的文件。由于磁盘空间使用原因,我只想在任何给定时间保留固定数量的这些文件。例如,文件被写入到C:\ my-folder。一旦my-folder达到1000个文件,如果我需要保存新文件,我希望从my-folder中删除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");

感谢您,杰夫。

你可以使用 http://linux.about.com/library/cmd/blcmdl8_tmpwatch.htm 来控制临时文件。 - emory
1个回答

2

这似乎不是充分利用EH缓存的方式。EH缓存更适合在内存中存储内容,并在内存填满时使用磁盘作为备份, 而不是将1000个项目存储在磁盘上然后轮换掉最后一个已使用的项目。

我个人会自己编写解决方案,因为您有非常具体的业务规则。存储1000个项目,当您准备存储第1001个文件时,可以找到要删除的文件。如果您在操作系统级别上启用访问时间,可以执行单个Linux命令来删除最近未访问的文件……通常情况下,您不会在Linux中为文件使用访问时间,但这将使您的问题在操作系统级别上更容易解决。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接