[英]Shared Hibernate 5 second-level cache with Hazelcast
我正在尝试使用 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>
我是否缺少某些配置或做错了什么?
谢谢!
您需要考虑缓存策略CacheConcurrencyStrategy
如果您的缓存数据更新频繁,并且您希望它在所有实例上都更新,那么使用CacheConcurrencyStrategy. READ_WRITE
CacheConcurrencyStrategy. READ_WRITE
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.