Не могу понять, как кеш запросов и L2C работает в спящем режиме

Я настроил Hazelcast как L2C для Hibernate. Затем сделал 1-й запрос, используя конструктор запросов Hibernate с подсказкой кеша запросов, и я получил:

org.hibernate.engine.internal.StatisticalLoggingSessionEventListener:258 - Session Metrics {
    3263961 nanoseconds spent acquiring 1 JDBC connections;
    401548 nanoseconds spent releasing 1 JDBC connections;
    4244272 nanoseconds spent preparing 1 JDBC statements;
    6266312446 nanoseconds spent executing 1 JDBC statements;
    0 nanoseconds spent executing 0 JDBC batches;
    60891580391 nanoseconds spent performing 641667 L2C puts;
    0 nanoseconds spent performing 0 L2C hits;
    8550 nanoseconds spent performing 1 L2C misses;
    0 nanoseconds spent executing 0 flushes (flushing a total of 0 entities and 0 collections);
    0 nanoseconds spent executing 0 partial-flushes (flushing a total of 0 entities and 0 collections)
}

Получил ставит в L2C. Когда я делаю второй запрос, я получил тонну запросов на выборку с поиском по идентификатору.

Конфигурации для Hazelcast, Hibernate просты, ничего сложного.

Сущность - это наследование таблицы соединений.

Аннотация @Cache(use = CacheConcurrencyStrategy.READ_WRITE), используемая в суперклассе.

Проверил статью Влада Михалча: https://vladmihalcea.com/hibernate-query-cache-n-plus-1-issue - предложения, чтобы избежать проблемы n+1, не полностью подходят для моего случая.

Ожидается получение результатов из кэша при втором запросе, но, похоже, я не понимаю, как работает кэш запросов. Может кто-нибудь объяснить шаг за шагом, как работает кеш запросов?

1 ответ

Решение

Hibernate не сохраняет результат запроса в области запроса в целом; он скорее хранит набор идентификаторов, где сущности находятся в других регионах "сущностей".

Мое предположение: если что-то неправильно настроено и Hazelcast не хранит сами сущности, возможно, что хотя список идентификаторов записей известен из кеша запросов, он загружает действительные сущности один за другим.

Сделайте запрос и проверьте размеры областей кеша.

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