Провайдеры кэша второго уровня Hibernate

Hibernate определяет SPI кэширования, а фактическое хранение выполняет отдельная библиотека. Конкретная интеграция зависит от версии Hibernate: нельзя переносить старую конфигурацию без проверки совместимости.

Варианты

  • JCache-интеграция — стандартный API, за которым стоит совместимый кэш-провайдер;
  • Ehcache — локальный или кластерный кэш, часто подключаемый через JCache;
  • Infinispan — распределённый кэш с интеграцией для Hibernate;
  • провайдер приложения — допустим, если корректно реализует SPI выбранной версии.

Название продукта само по себе ничего не гарантирует. Проверяются:

  1. совместимость с версией Hibernate;
  2. поддерживаемые concurrency strategy;
  3. локальный или распределённый режим;
  4. сериализация ключей и значений;
  5. инвалидирование при изменениях;
  6. метрики и ограничение размера.

Конфигурационное решение

Для каждой сущности ответить:

  • насколько часто читается и меняется;
  • допустимы ли устаревшие данные;
  • кто ещё пишет в таблицу;
  • какой размер региона;
  • что произойдёт при потере кэша.

Если на последний вопрос ответ «данные потеряются», это уже не кэш, а хранилище — архитектура неверна.

Вопросы для повторения

  1. Можно ли включить L2 одной настройкой для всех сущностей? Технически иногда да, но это редко разумно; области выбирают явно.
  2. Как выбрать провайдера? По совместимости, модели согласованности, режиму кластера и наблюдаемости.
  3. Должно ли приложение работать без L2? Да, кэш влияет на скорость, а не на корректность данных.
  4. Почему внешний SQL опасен для L2? Провайдер может не узнать об изменении и вернуть устаревшее состояние.

Связано: Кэширование hibernate.