Я использую Hazelcast в качестве провайдера кэша второго уровня для Hibernate.Я вижу, что записи в кэше выселяются каждые 60 секунд, независимо от настроек в hazelcast.xml.
Моя конфигурация hazelcast.xml:
<map name="default">
<in-memory-format>BINARY</in-memory-format>
<backup-count>1</backup-count>
<async-backup-count>0</async-backup-count>
<time-to-live-seconds>21600</time-to-live-seconds>
<max-idle-seconds>1800</max-idle-seconds>
<eviction-policy>NONE</eviction-policy>
<max-size policy="PER_NODE">10000</max-size>
<eviction-percentage>25</eviction-percentage>
<min-eviction-check-millis>100</min-eviction-check-millis>
<merge-policy>com.hazelcast.map.merge.PutIfAbsentMapMergePolicy</merge-policy>
<cache-deserialized-values>INDEX-ONLY</cache-deserialized-values>
<statistics-enabled>true</statistics-enabled>
</map>
<map name="*.Member">
<in-memory-format>BINARY</in-memory-format>
<backup-count>0</backup-count>
<async-backup-count>0</async-backup-count>
<time-to-live-seconds>21600</time-to-live-seconds>
<max-idle-seconds>1800</max-idle-seconds>
<eviction-policy>LFU</eviction-policy>
<max-size policy="PER_NODE">4000</max-size>
<statistics-enabled>true</statistics-enabled>
</map>
Мой hibernate.cache.region.factory_class
установлено на HazelcastLocalCacheRegionFactory
.
Включив все журналы, которые я смог найти, я вижу первую транзакцию, выдающую SQL для загрузки объекта Member
.Последующие транзакции не выдают SQL;скорее они находят объект в кэше второго уровня, как и ожидалось.Однако через 60 секунд сообщается об отсутствии кэша (хотя время простоя составляет 1800 секунд).Я могу видеть это, отправляя один и тот же запрос каждые 5 секунд и просматривая журналы - через 60 секунд я вижу свежий SQL, выданный для перезагрузки элемента.В Hibernate или Hazelcast никогда не указывается, что объекты выселяются.
Я также попытался удалить шаблон из имени карты и использовать FQCN.
Регистраторы:
<logger name="org.hibernate.sql" level="DEBUG" />
<logger name="org.hibernate.jdbc" level="DEBUG" />
<logger name="org.hibernate.cache" level="DEBUG" />
<logger name="org.hibernate.event" level="TRACE" />
<logger name="com.hazelcast" level="TRACE" />
Я использую
- Spring Boot 2.1.1
- Hibernate 5.3.7
- Hazelcast 3.11
- hazelcast-hibernate53 3.1.0