当前位置: 首页 > 知识库问答 >
问题:

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

有德业
2023-03-14

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

我的想法是每个微服务都嵌入了Hazelcast。微服务在同一个网络中运行,我认为Hazelcasts将形成一个集群。每个微服务都会在启动时将其数据放入本地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");
    }
}

共有1个答案

袁霍英
2023-03-14

HazelcastIMAP是一个分区数据结构:每个条目都映射到一个分区(基于散列其键),每个成员被指定为某些分区的所有者或备份。您所描述的内容可以通过在IMAP上配置一个近缓存来实现,如下所示:

@bean public Config hazelcastConfig(){NearCacheConfig routesNearCache=new NearCacheConfig(“routes-near-cache”).setinmemoryformat(inmemoryformat.object);返回new Config().setinstanceName(“routes-cache”).addmapconfig(new MapConfig().setname(“routes-cache”).setname(“routes-cache”).setname(“routes-cache”).setname(“routes-cache”).setevictionpolicy(evictionpolicy.lru).setnearcacheConfig

near缓存是条目的本地缓存,透明地工作在IMAP之上。第一次执行routeCache.get(K)时,将从拥有K映射到的分区的成员(可能是远程成员)获取条目。然后,该值被缓存在本地near缓存中,随后的每个routescache.get(K)都将在本地提供服务。Near cache处理无效事件(例如,当对特定键发生put时,该键的条目将从每个Near cache中移除),以确保值保持最新。

您可以考虑的另一种选择是使用replicatedmap:在这种情况下,每个成员维护映射中所有数据的完整副本,因此读取总是本地的。如果您的数据集适合每个成员的内存,并且您的用例主要是读的,那么您可以考虑这种数据结构。

 类似资料:
  • 我正在尝试在两个MySQL集群之间使用单个复制通道设置复制。我已经看了mysql.com的文档几次了,但似乎不能让它正常工作。 我遇到的问题是,对未配置为主服务器的SQL节点进行的查询不会复制NDBCLUSTER表的任何INSERT、UPDATE或DELETE查询,然而,当我在作为主服务器的SQL节点上插入、更新或删除一行时,它会很好地复制到其他集群。 我知道复制是设置的,因为如果我在主集群中的任

  • 我定义了“静态”hazelcast配置: 其中“10.0.0.2”是我的localhostip。我只希望将hazelcast的一个实例添加到我的tcpIpConfig成员中。我的朋友坐在同一个网络中,拥有编号为“10.0.0.3”的IP。他懒得从git上共享的属性文件中更改密码和组名,并且正在连接到我的集群。为什么他能够连接到我的集群?我如何防止这种情况?

  • 我正在进行一个Spring启动项目,我使用Hazelcast作为缓存。我启用了tcp作为连接方法,我还提到了一些成员。会员可以加入。但问题是其他节点也可以加入除了成员。有人能告诉我如何限制它吗? 这是我的配置,

  • 我一直在关注Kafka Quickstart在一台机器上“设置多代理集群”。(只是为了测试目的)。 用三个属性文件运行Kafka效果良好。(我在一台机器上运行它们进行测试) 1)我是为三台机器运行三个Zookeeper?使用相同的端口(2181)?还是只在一台机器上运行一个Zookeeper? 2)当我使用server.properties运行Kafka时,我知道每台机器应该有不同的broker.

  • 拜托,我需要你的帮助。 自上周以来,我一直在努力尝试在Windows服务器上配置兔子MQ集群。我重新安装了 RabbitMQ 3.7.8 和 ErlangOTP 21-1 超过 15 次,试图找出问题并修复它,但不幸的是,我所有的尝试都失败了。 我的环境: 三个虚拟机与操作系统: Windows 服务器 2012 环境变量设置: 安装步骤:(针对每台服务器) 完成以上服务器的安装后,我开始配置集群

  • 大家好 我尝试在SpringBoot应用程序中使用Hazelcast作为本地缓存,如下教程:https://hazelcast.com/blog/non-stop-client-with-near-cache/ 黑泽尔铸造分级版: 在我的版本中,我没有看到为连接到集群设置最大超时的方法(setClusterConnectTimeoutMillis()): ..如果没有它,它就会掉下来 com.ha