Ищите решение для кэширования диска LRU с повторным запуском в Java - ehcache, guava, JCS не подходят

У нас есть приложение, которое обрабатывает данные изображения, работающие на одной машине. Обработка очень дорогая (от 10 до 30 секунд), поэтому мы кэшируем полученные файлы на диск. Эти файлы также большие, поэтому мы должны сократить кеш, когда он достигает настраиваемых границ. Кэшированные файлы изображений сами создаются другим не-Java-процессом. И есть действия пользователя, которые могут привести к тому, что некоторые записи в кеше станут недействительными

Текущая реализация:

В настоящее время мы используем специальный менеджер кэша для этого и храним некоторые метаданные отдельно в структуре файловой системы.


Требования к провайдеру кэширования:

Я рассмотрел несколько решений для кэширования Java, но ни одно из них не соответствует нашим требованиям.

  1. переполнение на диск (мы не можем сохранить весь кэш в памяти, потому что оперативная память очень ограничена)
  2. постоянное при выключении, чтение при запуске (не должно быть отказоустойчивым, но, по крайней мере, с максимальным усилием)
  3. Стратегия выселенияLRU
  4. ограничение размера кеша диска и памяти (разным) максимальным количеством элементов
  5. пользовательские слушатели выселения кэша (чтобы уведомить вторую систему)

Вот почему общие рамки не подходят:

ehcache терпит неудачу в пунктах (1) и (2), так как нельзя иметь оба одновременно

СбойJCS в точке (5), так как невозможно реагировать на события вытеснения дискового кэша

Guava терпит неудачу в точке (1), так как нет опции переполнения на диск

Любой совет приветствуется.

1 ответ

Решение

Посмотрите на Infinispan. Я думаю, что это покрывает все ваши требования.

Другие вопросы по тегам