Провайдеры кэша второго уровня Hibernate
Hibernate определяет SPI кэширования, а фактическое хранение выполняет отдельная библиотека. Конкретная интеграция зависит от версии Hibernate: нельзя переносить старую конфигурацию без проверки совместимости.
Варианты
- JCache-интеграция — стандартный API, за которым стоит совместимый кэш-провайдер;
- Ehcache — локальный или кластерный кэш, часто подключаемый через JCache;
- Infinispan — распределённый кэш с интеграцией для Hibernate;
- провайдер приложения — допустим, если корректно реализует SPI выбранной версии.
Название продукта само по себе ничего не гарантирует. Проверяются:
- совместимость с версией Hibernate;
- поддерживаемые concurrency strategy;
- локальный или распределённый режим;
- сериализация ключей и значений;
- инвалидирование при изменениях;
- метрики и ограничение размера.
Конфигурационное решение
Для каждой сущности ответить:
- насколько часто читается и меняется;
- допустимы ли устаревшие данные;
- кто ещё пишет в таблицу;
- какой размер региона;
- что произойдёт при потере кэша.
Если на последний вопрос ответ «данные потеряются», это уже не кэш, а хранилище — архитектура неверна.
Вопросы для повторения
- Можно ли включить L2 одной настройкой для всех сущностей? Технически иногда да, но это редко разумно; области выбирают явно.
- Как выбрать провайдера? По совместимости, модели согласованности, режиму кластера и наблюдаемости.
- Должно ли приложение работать без L2? Да, кэш влияет на скорость, а не на корректность данных.
- Почему внешний SQL опасен для L2? Провайдер может не узнать об изменении и вернуть устаревшее состояние.
Связано: Кэширование hibernate.