【问题标题】:Shared Hibernate 5 second-level cache with Hazelcast与 Hazelcast 共享 Hibernate 5 二级缓存
【发布时间】:2021-10-07 04:47:28
【问题描述】:

我正在尝试使用 JCache 和 Hazelcast 实现共享的二级 Hibernate 缓存。

目标是让多个服务器加入一个 Hazelcast 集群,共享同一个 Hibernate 二级缓存, 因此,当其中一台服务器(节点)上的 Hibernate 更新缓存时,所有其他服务器(节点)也会更新其二级缓存。 我已经设法建立了一个包含两个节点的 Hazelcast 集群,每个节点都“看到”另一个节点的二级缓存。

问题是每个节点仍在使用自己的缓存,因此当其中一个节点更新缓存时, 另一个继续从其“过时的”缓存中获取旧的(未更改的)条目。 换句话说 - 我有两个二级缓存分布在两个节点之间,每个节点使用不同的缓存。

我正在使用 Hazelcast 4.2、Hibernate 5.4、Spring Boot 2.4.8

这些是我的 spring-boot 属性:

spring.jpa.properties.hibernate.generate_statistics          = true
spring.jpa.properties.hibernate.cache.use_second_level_cache = true
spring.jpa.properties.hibernate.cache.use_query_cache        = true
spring.jpa.properties.javax.persistence.sharedCache.mode     = ENABLE_SELECTIVE
spring.jpa.properties.hibernate.cache.region.factory_class   = jcache
spring.jpa.properties.hibernate.javax.cache.provider         = com.hazelcast.cache.impl.HazelcastServerCachingProvider
spring.jpa.properties.hibernate.javax.cache.uri              = classpath:hazelcast.xml

hazelcast.xml 中的示例缓存配置:

<cache name="jobsCache">
    <statistics-enabled>true</statistics-enabled>
    <management-enabled>true</management-enabled>
    <eviction size="200" max-size-policy="ENTRY_COUNT" eviction-policy="LRU" />
    <expiry-policy-factory>
        <timed-expiry-policy-factory expiry-policy-type="CREATED" duration-amount="10" time-unit="MINUTES"/>
    </expiry-policy-factory>
</cache>

我是否缺少某些配置或做错了什么?

谢谢!

【问题讨论】:

    标签: java hibernate caching hazelcast


    【解决方案1】:

    需要考虑缓存策略CacheConcurrencyStrategy 如果您的缓存数据经常更新,并且您希望在所有实例上更新它,请使用CacheConcurrencyStrategy. READ_WRITE

    【讨论】:

      猜你喜欢
      • 2016-03-24
      • 2016-04-18
      • 1970-01-01
      • 2014-09-11
      • 1970-01-01
      • 2015-03-19
      • 2019-07-05
      • 2015-05-14
      • 2010-11-16
      相关资源
      最近更新 更多