You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

非Web Java应用实现Hazelcast缓存,确保重启后Map数据不丢失

Hazelcast嵌入式缓存本地持久化实现方案

针对非Web Java应用的缓存需求,可直接使用Hazelcast自带的Map持久化能力实现磁盘落地,重启后缓存数据不丢失,具体实现步骤如下:

1. 引入Hazelcast核心依赖

以Maven为例,在pom.xml中添加依赖:

<dependency>
    <groupId>com.hazelcast</groupId>
    <artifactId>hazelcast</artifactId>
    <version>5.3.2</version> <!-- 可替换为最新稳定版 -->
</dependency>

2. 配置持久化规则

这里使用代码配置方式,无需额外配置文件,适配main方法启动场景:

  • 指定缓存Map的持久化目录,确保应用对该目录有读写权限
  • 开启Map的持久化开关,支持启动时自动从磁盘加载原有数据
import com.hazelcast.config.*;
import com.hazelcast.core.Hazelcast;
import com.hazelcast.core.HazelcastInstance;
import com.hazelcast.map.IMap;

public class HazelcastCacheDemo {
    public static void main(String[] args) {
        // 配置Hazelcast实例
        Config config = new Config();
        config.setInstanceName("local-cache-instance");
        
        // 配置本地持久化规则
        PersistenceConfig persistenceConfig = new PersistenceConfig();
        persistenceConfig.setEnabled(true);
        persistenceConfig.setBaseDir("./hazelcast-persistence"); // 自定义本地持久化存储路径
        config.setPersistenceConfig(persistenceConfig);
        
        // 启动Hazelcast实例
        HazelcastInstance hzInstance = Hazelcast.newHazelcastInstance(config);
        IMap<Long, String> dataMap = hzInstance.getMap("data");
        
        // 业务逻辑
        Long targetKey = 1001L;
        if (dataMap.containsKey(targetKey)) {
            // 缓存命中,直接读取
            String cacheData = dataMap.get(targetKey);
            System.out.println("命中缓存,数据:" + cacheData);
        } else {
            // 缓存未命中,查询DB
            String dbData = queryDataFromDb(targetKey);
            // 写入缓存,会自动持久化到磁盘
            dataMap.put(targetKey, dbData);
            System.out.println("查询DB获取数据:" + dbData);
        }
        
        // 应用关闭前调用优雅停机方法,保证数据完整落盘
        // hzInstance.shutdown();
    }
    
    // 模拟DB查询方法
    private static String queryDataFromDb(Long key) {
        return "DB查询返回的数值:" + key;
    }
}

注意事项

  • 第一次启动应用后,会自动在当前目录生成./hazelcast-persistence文件夹存储缓存数据,后续重启应用会自动加载该目录下的原有缓存
  • 如果对性能要求较高,可配置写后异步(write-behind) 策略,缓存写入会异步落盘,降低IO阻塞;对数据一致性要求高则使用默认的写穿(write-through) 策略,写入缓存的同时同步落盘
  • 不要将持久化目录设置在系统临时目录下,避免系统自动清理导致缓存数据丢失

内容的提问来源于stack exchange,提问作者parantap dansana

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 04:27:03