繁体   English   中英

用Spring配置Hazelcast的正确方法

[英]Proper way to configure Hazelcast with Spring

我有一个在三个节点上运行的hazelcast集群,具有以下配置(使用ansible和docker进行部署):

hazelcast_cluster_login: "login"
hazelcast_cluster_password: "password"
hazelcast_maps: <map name="my_map"><backup-count>1</backup-count>
<time-to-live-seconds>3600</time-to-live-seconds></map>

和以下Spring配置

@Configuration
@EnableCaching
public class CacheConfig {

    @Autowired
    private HazelcastProperties properties;

    @Bean
    public HazelcastInstance getConfig() {
        log.info("Connecting to Hazelcast on {} with login = {}",
            properties.getHosts(),
            properties.getLogin());

        ClientConfig clientConfig = new ClientConfig();
        clientConfig.getGroupConfig()
            .setName(properties.getLogin())
            .setPassword(properties.getPassword());
        clientConfig.getNetworkConfig()
            .setAddresses(properties.getHosts())
            .setConnectionAttemptLimit(0);
        HazelcastInstance instance = HazelcastClient.newHazelcastClient(clientConfig);
        return instance;
    }

    @Bean
    public CacheManager hazelcastCacheManager(HazelcastInstance 
        hazelcastInstance) {
        return new HazelcastCacheManager(hazelcastInstance);
    }

}

此代码能够成功连接和授权。

什么是使用正确的方式my_map地图在我的应用@Cacheable 使用@Cacheable("my_map")是否正确(无法找到诊断此地图是否为空的方法)? PS尝试使用config.addMapConfig(...)进行配置,但这不适用于正在运行的集群。

尝试类似

@Service
public class MyService {

    @Cacheable("my_map")
    public Integer count(String input) {
        System.out.printf("input==%s%n", input);
        return input.length();
    }

}

这将创建一个具有字符串键和一个整数值的名为“ my_map”的IMap 因此,它缓存了字符串的长度以节省重新计算的时间-几乎不值得,仅是对该概念的演示。

使用相同的输入多次调用此函数,第一次调用应触发该方法,您将看到系统输出。 具有相同输入的第二个调用应使用缓存的值,并且该方法将不会被调用,没有系统输出。

您可以使用hazelcastInstance.getMap("my_map")直接访问基础IMap,然后在地图上执行诸如size()keySet()操作,以查看其中的内容。

size()keySet()不是您通常要执行的操作。 size()在计算上很昂贵,并且keySet()可能会使调用者的内存溢出,因为远程分布式映射可能会很大。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM