Hazelcast высвобождает слишком быстро объекты из кэша второго уровня Hibernate - PullRequest
0 голосов
/ 11 февраля 2019

Я использую 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

1 Ответ

0 голосов
/ 19 февраля 2019

У меня такая же проблема.Каждые 60 секунд CleanupService запускает cleanup в LocalRegionCache, что удаляет записи с ttl> 0 из кэша.

Это может быть ошибка в hazelcast-hibernate53 .Я сообщил об этом как проблема .

РЕДАКТИРОВАТЬ: Это была ошибка.Это исправлено в hazelcast-hibernate5 1.3.2.

...