3

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

当前实施:

目前我们正在为此使用自定义缓存管理器,并将一些元数据单独存储在文件系统结构中。


缓存提供者的要求:

我研究了几个 Java 缓存解决方案,但似乎没有一个符合我们的要求。

  1. 溢出到磁盘(我们不能将整个缓存保存在内存中,因为 RAM 非常有限)
  2. 关机时持久,启动时读取(不能是故障安全,但至少是尽力而为)
  3. LRU驱逐策略
  4. 磁盘和内存缓存的大小限制(不同)最大元素数
  5. 自定义缓存驱逐侦听器(通知第二个系统)

这就是常见框架不符合条件的原因:

ehcache在点(1)(2)上失败,因为不能同时拥有两者

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

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

任何建议表示赞赏。

4

1 回答 1

3

看看Infinispan。我认为它涵盖了您的所有要求。

于 2015-05-20T13:39:50.137 回答