如何在Hazelcast群集中配置复制缓存?

如何在Hazelcast群集中配置复制缓存?,hazelcast,Hazelcast,我的Spring应用程序由十几个微服务组成。每个微服务都提供数据,这些数据不会经常更改。为了减少微服务之间的通信,我正在考虑开始使用Hazelcast 我的想法是每个微服务都会嵌入Hazelcast。微服务运行在同一个网络中,我想Hazelcast会形成一个集群。每个微服务将在启动时将其数据放入本地Hazelcast,并将数据复制到集群中的每个其他Hazelcast。当一个微服务需要从其他微服务加载数据时,它会首先查看本地Hazelcast,只有在本地缓存丢失数据时,它才会进行网络调用 是否可以

我的Spring应用程序由十几个微服务组成。每个微服务都提供数据,这些数据不会经常更改。为了减少微服务之间的通信,我正在考虑开始使用Hazelcast

我的想法是每个微服务都会嵌入Hazelcast。微服务运行在同一个网络中,我想Hazelcast会形成一个集群。每个微服务将在启动时将其数据放入本地Hazelcast,并将数据复制到集群中的每个其他Hazelcast。当一个微服务需要从其他微服务加载数据时,它会首先查看本地Hazelcast,只有在本地缓存丢失数据时,它才会进行网络调用

是否可以使用Hazelcast配置类似的内容?我已经试过了,但来自微服务的数据碰巧分布在集群中的所有Hazelcast节点上

我使用了非常简单的配置:

@Configuration
@EnableCaching
@Profile("hazelcast")
public class HazelcastCacheConfiguration {
    @Bean
    public Config hazelcastConfig() {
        return new Config()
                .setInstanceName("routes-cache")
                .addMapConfig(
                        new MapConfig()
                                .setName("ports-cache")
                                .setEvictionPolicy(EvictionPolicy.LRU)
                ).addMapConfig(
                        new MapConfig()
                                .setName("routes-cache")
                                .setEvictionPolicy(EvictionPolicy.LRU)
                ).setProperty("hazelcast.logging.type", "slf4j");
    }
}
我在Hazelcast管理中心检查了跨集群的数据复制。我的样本数据集只有13条记录。微服务在启动时将13条记录推送到本地Hazelcast,在管理中心,我看到集群中有2个节点,其中一个节点上有9条记录,另一个微服务节点上有4条记录


提前谢谢你

Hazelcast
IMap
是一个分区数据结构:每个成员都被指定为某些分区的所有者或备份。 您所描述的内容可以通过在
IMap
上配置近缓存来实现,如下所示:


@豆子
公共配置hazelcastConfig(){
NearCacheConfig routesNearCache=新的NearCacheConfig(“缓存附近的路由”)
.setInMemoryFormat(InMemoryFormat.OBJECT);
返回新配置()
.setInstanceName(“路由缓存”)
.addMapConfig(
新的MapConfig()
.setName(“路由缓存”)
.SetReceivingPolicy(ReceivingPolicy.LRU)
.setNearCacheConfig(路由近缓存)
);
//在这里继续配置的其余部分
}

是条目的本地缓存,在
IMap
上透明地工作。第一次执行
routeCache.get(K)
时,将从拥有
K
映射到的分区的(可能是远程)成员处获取条目。然后将该值缓存在本地近缓存中,每个后续的
routeCache.get(K)
将在本地提供服务。近缓存与失效事件一起工作(例如,当某个特定键上发生
put
时,该键的条目将从每个近缓存中删除),以确保值保持最新

您可以考虑使用另一种替代方法:在这种情况下,每个成员都维护地图中所有数据的完整副本,因此读取始终是本地的。如果数据集适合于每个成员的内存,用例大多是读取的,则可以考虑此数据结构。