You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

嵌入式拓扑下Hazelcast节点不共享缓存条目问题求助

解决嵌入式Hazelcast集群缓存不共享的问题

嗨,我之前也碰到过一模一样的情况!你的Hazelcast集群确实正常组建起来了(从节点日志能看出来),但问题出在Spring的缓存抽象没有和Hazelcast的分布式缓存绑定,导致每个节点其实在用自己的本地缓存,自然不会共享数据。

问题根源

当你只添加@EnableCaching注解但没有显式配置CacheManager时,Spring会默认创建一个ConcurrentMapCacheManager——这是个纯本地的缓存实现,和你的Hazelcast集群完全没关系。所以哪怕Hazelcast节点互相发现了,Spring还是在各自节点用本地缓存,缓存数据自然没法共享。

解决方案:绑定Spring缓存到Hazelcast分布式缓存

你只需要在现有的HazelcastConfig配置类里,添加两个关键的Bean:HazelcastInstance和HazelcastCacheManager,让Spring明确使用Hazelcast的分布式缓存来处理@Cacheable注解。

修改后的完整配置类代码:

@Configuration
@EnableCaching
public class HazelcastConfig {
    public static final String BANKS = "banks";

    @Bean
    Config config() {
        Config config = new Config();
        MapConfig mapConfig = new MapConfig();
        mapConfig.setTimeToLiveSeconds(3000);
        config.getMapConfigs().put(BANKS, mapConfig);
        return config;
    }

    // 创建Hazelcast实例,用上面定义的配置
    @Bean
    public HazelcastInstance hazelcastInstance(Config config) {
        return Hazelcast.newHazelcastInstance(config);
    }

    // 让Spring缓存抽象使用Hazelcast的缓存管理器
    @Bean
    public CacheManager cacheManager(HazelcastInstance hazelcastInstance) {
        return new HazelcastCacheManager(hazelcastInstance);
    }
}

原理说明

  • HazelcastInstance Bean:基于你的配置创建一个嵌入式Hazelcast节点,加入集群。
  • HazelcastCacheManager Bean:告诉Spring的缓存系统,使用Hazelcast的分布式Map来存储缓存数据。这样当你用@Cacheable(HazelcastConfig.BANKS)时,操作的就是集群中共享的那个名为BANKS的分布式Map,所有节点都能访问到同一份缓存数据。

验证步骤

修改配置后重启两个应用实例,再按之前的流程测试:

  1. 调用实例1的findByAccountNumber方法→执行方法体(缓存为空)
  2. 再次调用实例1的方法→直接取缓存(正常)
  3. 调用实例2的方法→不会执行方法体,直接从集群缓存取值(符合预期)

额外检查(可选)

确保你的依赖是完整的,如果用Maven的话,pom.xml里需要包含:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-cache</artifactId>
</dependency>
<dependency>
    <groupId>com.hazelcast</groupId>
    <artifactId>hazelcast</artifactId>
</dependency>

内容的提问来源于stack exchange,提问作者S-Wing

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 10:42:36