You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Spring Boot集成Hazelcast Near Cache配置及服务端启动示例请求

没问题!我给你整理一套完整的Spring Boot + Hazelcast Near Cache配置方案,包括服务端启动、客户端Near Cache设置,还有和Hibernate二级缓存的集成示例,都是可直接复用的代码~

一、Hazelcast服务端配置(两种启动方式)

你可以选择嵌入式服务端(和Spring Boot一起启动)或者独立服务端,我都给你提供示例:

1. 嵌入式服务端(Spring Boot内置)

写一个配置类,Spring Boot启动时会自动启动Hazelcast节点:

import com.hazelcast.config.Config;
import com.hazelcast.config.MapConfig;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class HazelcastServerConfig {

    @Bean
    public Config hazelcastServerConfig() {
        Config config = new Config();
        // 设置集群名称,客户端需要和这个一致才能连接
        config.setClusterName("hazelcast-demo-cluster");

        // 配置默认Map的基础参数(比如备份数,保证高可用)
        MapConfig defaultMapConfig = new MapConfig("default");
        defaultMapConfig.setBackupCount(1);
        config.addMapConfig(defaultMapConfig);

        // 针对业务缓存单独配置Map(比如用户缓存)
        MapConfig userCacheMapConfig = new MapConfig("user-cache");
        userCacheMapConfig.setBackupCount(1);
        config.addMapConfig(userCacheMapConfig);

        return config;
    }
}

2. 独立服务端(单独启动)

如果需要独立部署Hazelcast集群,可以下载官方jar包,编写hazelcast.xml配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<hazelcast xmlns="http://www.hazelcast.com/schema/config"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://www.hazelcast.com/schema/config
           http://www.hazelcast.com/schema/config/hazelcast-config-5.3.xsd">
    <cluster-name>hazelcast-demo-cluster</cluster-name>
    <map name="default">
        <backup-count>1</backup-count>
    </map>
    <map name="user-cache">
        <backup-count>1</backup-count>
    </map>
</hazelcast>

启动命令(替换成你下载的Hazelcast版本):

java -jar hazelcast-5.3.6.jar -c hazelcast.xml
二、客户端配置(核心:Near Cache设置)

客户端需要连接到服务端,并针对特定Map配置Near Cache——这样客户端会把常用数据缓存到本地,减少远程调用,提升速度:

import com.hazelcast.client.config.ClientConfig;
import com.hazelcast.client.config.NearCacheConfig;
import com.hazelcast.config.EvictionConfig;
import com.hazelcast.config.EvictionPolicy;
import com.hazelcast.config.MaxSizePolicy;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class HazelcastClientConfig {

    @Bean
    public ClientConfig hazelcastClientConfig() {
        ClientConfig clientConfig = new ClientConfig();
        clientConfig.setClusterName("hazelcast-demo-cluster");

        // 配置服务端地址,多个节点用逗号分隔
        clientConfig.getNetworkConfig().addAddress("127.0.0.1:5701");

        // 针对user-cache配置Near Cache
        NearCacheConfig nearCacheConfig = new NearCacheConfig("user-cache");
        // 服务端缓存更新时,自动失效客户端本地缓存,避免脏数据
        nearCacheConfig.setInvalidateOnChange(true);
        // 缓存存活时间(5分钟)
        nearCacheConfig.setTimeToLiveSeconds(300);
        // 最大空闲时间(3分钟)
        nearCacheConfig.setMaxIdleSeconds(180);

        // 配置驱逐策略:本地缓存到1000条时,按LRU(最近最少使用)驱逐
        EvictionConfig evictionConfig = new EvictionConfig();
        evictionConfig.setEvictionPolicy(EvictionPolicy.LRU);
        evictionConfig.setMaxSizePolicy(MaxSizePolicy.ENTRY_COUNT);
        evictionConfig.setSize(1000);
        nearCacheConfig.setEvictionConfig(evictionConfig);

        clientConfig.addNearCacheConfig(nearCacheConfig);
        return clientConfig;
    }
}
三、集成Hibernate二级缓存

把Hazelcast作为Hibernate的二级缓存,让实体类查询也能用上Near Cache的优化:

1. 依赖配置(Maven)

<!-- Hazelcast Spring Boot Starter -->
<dependency>
    <groupId>com.hazelcast</groupId>
    <artifactId>hazelcast-spring-boot-starter</artifactId>
    <version>5.3.6</version>
</dependency>
<!-- Hazelcast Hibernate集成包(根据你的Hibernate版本选择,这里是5.3.x) -->
<dependency>
    <groupId>com.hazelcast</groupId>
    <artifactId>hazelcast-hibernate53</artifactId>
    <version>5.3.6</version>
</dependency>

2. 配置文件(application.properties)

# 开启Hibernate二级缓存和查询缓存
spring.jpa.properties.hibernate.cache.use_second_level_cache=true
spring.jpa.properties.hibernate.cache.use_query_cache=true
# 指定Hazelcast作为缓存区域工厂
spring.jpa.properties.hibernate.cache.region.factory_class=com.hazelcast.hibernate.HazelcastCacheRegionFactory
# 如果用客户端模式,指定客户端配置文件路径
spring.jpa.properties.hibernate.hazelcast.cache.client_config=classpath:hazelcast-client.xml

3. 实体类配置缓存

给需要缓存的实体类添加注解,关联到我们配置了Near Cache的Map:

import javax.persistence.*;
import org.hibernate.annotations.Cache;
import org.hibernate.annotations.CacheConcurrencyStrategy;

@Entity
@Table(name = "users")
// READ_WRITE策略支持读写,region对应我们的user-cache Map
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE, region = "user-cache")
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String username;
    private String email;

    // getter、setter省略
}
四、测试方法缓存

用Spring的@Cacheable注解缓存方法调用,直接复用配置好的Near Cache:

import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;

@Service
public class UserService {

    // 缓存方法结果,value对应user-cache Map
    @Cacheable(value = "user-cache", key = "#userId")
    public User getUserById(Long userId) {
        // 模拟数据库查询,第一次调用会打印,后续从缓存获取
        System.out.println("从数据库查询用户ID: " + userId);
        User user = new User();
        user.setId(userId);
        user.setUsername("user_" + userId);
        user.setEmail("user_" + userId + "@example.com");
        return user;
    }
}

内容的提问来源于stack exchange,提问作者tinashe.chipomho

火山引擎 最新活动