簡體   English   中英

與 Hazelcast 共享 Hibernate 5 二級緩存

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM