java - 使用 Spring 配置 Hazelcast 的正确方法

标签 java spring hazelcast

我有一个 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")正确(找不到方法来诊断该 map 是否为空)? 附:尝试使用config.addMapConfig(...)进行配置,但这不适用于正在运行的集群。

最佳答案

尝试类似的事情

@Service
public class MyService {

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

}

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

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

您可以使用 hazelcastInstance.getMap("my_map") 直接访问底层 IMap,然后执行 size()keySet() 等操作code> 在 map 上查看其中内容。

size()keySet() 不是您通常想要执行的操作。 size() 的计算成本很高,并且 keySet() 可能会溢出调用者的内存,因为远程分布式 map 可能会很大。

关于java - 使用 Spring 配置 Hazelcast 的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53853735/

相关文章:

java - admob 不工作是因为(我认为)google play 服务

java - 使用 DecimalFormat 删除最后三个零

java - Springs SimpleUrlHandlerMapping 没有映射我的 Controller

java - eclipse中找不到Pivotal tc server的安装目录

Hazelcast 操作超时异常

java - Hazelcast ScheduledExecutorService

java - Java 中初始化变量的内存分配

java - 对象存储 - 无法访问区域 "London"中的容器

java - 与 HibernateTemplate 和 SessionFactory 的单一数据库连接

hibernate - Hazelcast 与 Ehcache + Hazelcast 注释用于使用 Spring 和 Hibernate 在服务/dao 层进行缓存?