2010-09-17 130 views
3

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

我的代码的某些代码段如下所示:

// 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

您可以使用http://linux.about.com/library/cmd/blcmdl8_tmpwatch.htm来控制临时文件。 – emory 2010-09-17 04:14:37

回答

2

这似乎并不像你正在使用EH缓存到它的潜力。要存储1000个在磁盘上的项目,然后旋转最后使用的一个。 EH缓存更适用于将内容存储在内存中,并且在内存填充时使用磁盘作为备份。

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