在Java中寻找重启持久LRU磁盘缓存解决方案-ehcache、guava、JCS不符合条件

在Java中寻找重启持久LRU磁盘缓存解决方案-ehcache、guava、JCS不符合条件,java,caching,guava,ehcache,jcs,Java,Caching,Guava,Ehcache,Jcs,我们有一个处理图像数据的应用程序,在一台机器上运行。处理过程非常昂贵(10到30秒),因此我们将生成的文件缓存在磁盘上。这些文件也很大,所以当缓存到达可配置边界时,我们必须修剪缓存。缓存的图像文件本身是由不同的非Java进程创建的。还有一些用户操作可能会导致某些缓存条目变得无效 目前的执行情况: 目前,我们正在使用一个定制的缓存管理器,并将一些元数据单独存储在一个文件系统结构中 缓存提供程序的要求: 我已经研究了几个Java缓存解决方案,但似乎没有一个符合我们的要求 磁盘溢出(我们无法将整个缓

我们有一个处理图像数据的应用程序,在一台机器上运行。处理过程非常昂贵(10到30秒),因此我们将生成的文件缓存在磁盘上。这些文件也很大,所以当缓存到达可配置边界时,我们必须修剪缓存。缓存的图像文件本身是由不同的非Java进程创建的。还有一些用户操作可能会导致某些缓存条目变得无效

目前的执行情况: 目前,我们正在使用一个定制的缓存管理器,并将一些元数据单独存储在一个文件系统结构中


缓存提供程序的要求: 我已经研究了几个Java缓存解决方案,但似乎没有一个符合我们的要求

  • 磁盘溢出(我们无法将整个缓存保留在内存中,因为RAM非常有限)
  • 持续性关闭时读取,启动时读取(不能是故障保护,但至少要尽最大努力)
  • LRU驱逐策略
  • 磁盘和内存缓存的大小限制(不同的)最大元素数
  • 自定义缓存退出侦听器(通知第二个系统)

  • 以下是通用框架不合格的原因: ehcache在点(1)(2)上失败,因为不能同时拥有这两个点

    JCS在点(5)上失败,因为无法对磁盘缓存收回事件做出反应

    Guava在点(1)失败,因为没有磁盘溢出选项


    任何建议都将不胜感激。

    请查看。我认为它涵盖了您的所有需求。

    这是softwarerec的问题,而不是感谢您的建议。我不是在寻找独立的软件,而是一个可以嵌入的库。这在softwarerec中也更合适吗?内容似乎更侧重于终端用户软件。像“X框架vs Y框架”这样的问题在网络上很常见,不是吗?