Мне нужен 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();
}
}
Также приветствуются предложения для других платформ, которые могли бы выполнить задачу.