我正在开发需要生成并经常访问数千个文件的应用程序。出于磁盘空间使用原因,我只想在任何给定时间保留固定数量的这些文件。例如,文件被写入 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");
Thanks,
Jeff
这看起来不像您正在使用 EH 缓存来发挥其潜力......在磁盘上存储 1000 个项目,然后轮换掉最后使用的一个。 EH Cache 更多的是用于在内存中存储内容,并在内存填满时使用磁盘作为备份。
我个人会自己推出。您有非常具体的业务规则。存储 1000 件物品。然后当你准备好存储文件1001时,你可以去找一个文件来删除。如果您在操作系统级别打开了访问时间,则可以执行单个 linux 命令来删除最近最少访问的文件...通常您不会在 linux 中对文件使用访问时间,但这会使您的问题很容易解决在操作系统级别解决..
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)