我需要带有文件存储的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();
}
}
也欢迎提出其他可以完成任务的框架的建议。
答案 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