我正在开发应用程序,我需要生成并经常访问数千个文件。出于磁盘空间使用的原因,我只想在任何给定时间保留固定数量的这些文件。例如,文件正被写入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");
谢谢,
杰夫
答案 0 :(得分:2)
这似乎不是你正在使用EH Cache来实现它的潜力..在磁盘上存储1000个项目然后旋转掉最后一个使用的项目。 EH Cache更适合在内存中存储内容,并在内存填满时使用磁盘作为备份。
我个人只是自己动手。您有非常具体的业务规则。存储1000个项目。然后,当您准备存储文件1001时,您可以找到要删除的文件。如果您在操作系统级别打开了访问时间,则可以执行单个linux命令来删除最近访问过的文件...通常您不会对linux中的文件使用访问时间,但这会使您的问题变得容易在OS级解决..