Hazelcast 配置文件存储

Hazelcast configure file storage

我需要一个带有文件存储的 java 缓存,它可以在 JVM 崩溃后继续存在。

之前我用的是ehcache,配置为.heap().disk()。 但是,它存在 JVM 关闭不明确的问题 - 下次启动会清除存储。

我唯一的要求是至少部分数据在重启后仍然存在。

我尝试使用 hazelcast,但是使用以下代码片段,甚至程序 returns 的后续 运行 打印 "null".

请建议如何配置 hazelcast,以便 cache.put 写入磁盘并在启动时加载。

public class HazelcastTest {

public static void main(String[] args) throws InterruptedException {
    System.setProperty("hazelcast.jcache.provider.type", "server");

    Config config = new Config();
    HotRestartPersistenceConfig hotRestartPersistenceConfig = new HotRestartPersistenceConfig()
        .setEnabled(true)
        .setBaseDir(new File("cache"))
        .setBackupDir(new File("cache/backup"))
        .setParallelism(1)
        .setClusterDataRecoveryPolicy(HotRestartClusterDataRecoveryPolicy.FULL_RECOVERY_ONLY);
    config.setHotRestartPersistenceConfig(hotRestartPersistenceConfig);

    HazelcastInstance instance = Hazelcast.newHazelcastInstance(config);

    CacheConfig<String, String> cacheConfig = new CacheConfig<>();
    cacheConfig.getHotRestartConfig().setEnabled(true);
    cacheConfig.getHotRestartConfig().setFsync(true);

    CachingProvider cachingProvider = Caching.getCachingProvider();
    Cache<String, String> data = cachingProvider.getCacheManager().createCache("data", cacheConfig);

    System.out.println(data.get("test"));
    data.put("test", "value");

    data.close();
    instance.shutdown();
}

}

也欢迎对可以完成任务的其他框架提出建议。

@Igor,热重启是 Hazelcast 的一项企业功能。您需要使用具有有效许可证密钥的 Hazelcast 企业版。

您真的需要将缓存数据存储在文件中,还是只在其他地方保存缓存数据?如果可以使用数据库,则可以使用开源版本中提供的 MapStore 并将数据写入持久数据存储。您甚至可以使用 write-behind 模式来加快写入速度。

查看这些示例项目:https://github.com/hazelcast/hazelcast-code-samples/tree/master/distributed-map/mapstore