Я настроил 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 (using = CacheConcurrencyStrategy.READ_WRITE) аннотация, используемая в суперклассе.
Проверено Статья Влада Михалчеа: https://vladmihalcea.com/hibernate-query-cache-n-plus-1-issue - предложения, позволяющие избежать проблемы n + 1, не полностью подходят для моего случая.
Ожидается получение результатов из кэша при втором запросе, но, похоже, я не понимаю, как работает кэш запросов.Может кто-нибудь объяснить шаг за шагом, как работает кеш запросов?