Java-кеш с истечением срока действия с момента первой записи

У меня есть события, которые должны быть собраны в постоянное хранилище значений ключей. Через 24 часа после первой вставки ключа эта накопленная запись должна быть обработана и удалена из хранилища. Обработка данных с истекшим сроком действия распределяется между несколькими узлами, поэтому использование базы данных связано с проблемами синхронизации обработки. Я не хочу использовать любую базу данных SQL. Для меня лучше всего подойдет кеш с настраиваемой политикой истечения срока действия в соответствии с моими потребностями. Есть ли? Или это можно решить с помощью некоторой базы данных No-SQL?

1 ответ

Это должно быть возможно с такими продуктами, как http://infinispan.org/ или hazelcast.

Оба совместимы с JSR107.

С JSR107-совместимым API-интерфейсом кеширования возможный подход состоит в том, чтобы установить 24-часовой срок действия через CreatedExpiryPolicy. Затем вы реализуете и регистрируете CacheEntryExpiredListener, чтобы получить вызов по истечении срока действия записи.

Вызов CacheEntryExpiredListener может быть снисходительным и зависящим от реализации. На самом деле событие вызвано "выселением из-за истечения срока действия". Например, одна реализация может выполнять сканирование перидока и удалять просроченные записи каждые 30 минут. Однако я думаю, что "время задержки" настраивается в большинстве реализаций, поэтому вы сможете работать в определенных пределах.

Также проверьте, есть ли какие-то ограничения ресурсов для обратных вызовов событий, с которыми вы можете столкнуться, например, пулы потоков.

Я упомянул infispan или hazelcast по двум причинам:

  • Вам могут понадобиться возможности распространения.
  • Поскольку вы выполняете длительную обработку и сохраняете данные, которые невозможно восстановить, вам могут потребоваться функции сохранения и отказоустойчивости. Поэтому я бы сказал, что простой кэш в памяти, такой как Google Guava, выходит за рамки.

Удачи!

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