Hazelcast配置文件存储

时间:2019-02-15 20:05:37

标签: caching ehcache hazelcast

我需要带有文件存储的Java缓存,该缓存可以在JVM崩溃后幸免。

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

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

我尝试使用hazelcast,但是使用以下代码段,即使随后运行该程序也会返回打印“ 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();
}

}

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

1 个答案:

答案 0 :(得分:1)

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

您真的需要存储在文件中,还是仅将缓存数据保留在其他位置?如果可以使用数据库,则可以使用<Oembed http://instagram.com/p/BL7ti/> (在开放源代码版本中可用)并将数据写入持久性数据存储。您甚至可以使用MapStore模式来加快写入速度。

请参阅以下示例项目:https://github.com/hazelcast/hazelcast-code-samples/tree/master/distributed-map/mapstore