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
我需要一个带有文件存储的 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