代码之家  ›  专栏  ›  技术社区  ›  Jeff Storey

Java缓存磁盘存储

  •  3
  • Jeff Storey  · 技术社区  · 14 年前

    我正在开发一个需要生成和频繁访问数千个文件的应用程序。出于磁盘空间使用的原因,我只想在任何给定的时间保持这些文件的固定数量。例如,文件正在写入C:\my文件夹。一旦我的文件夹达到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 回复  |  直到 14 年前
        1
  •  2
  •   bwawok    14 年前

    这看起来不像你在用EH缓存来挖掘它的潜力。。在磁盘上存储1000个项目,然后旋转掉最后一个使用的项目。EH-Cache更多的是用于在内存中存储内容,并在内存满时使用磁盘作为备份。

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