Hazelcast настроить хранилище файлов - PullRequest
0 голосов
/ 15 февраля 2019

Мне нужен 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 голосов
/ 15 февраля 2019

@ Игорь, горячий перезапуск - особенность Hazelcast для предприятий.Вам необходимо использовать версию Hazelcast Enterprise с действующим лицензионным ключом.

Вам действительно нужно сохранить файл или просто сохранить данные кэша в другом месте?Если вы можете использовать базу данных, вы можете использовать MapStore, которая доступна в версии с открытым исходным кодом и записывать данные в постоянное хранилище данных.Вы даже можете использовать режим write-behind для ускорения записи.

См. Этот пример проекта: https://github.com/hazelcast/hazelcast-code-samples/tree/master/distributed-map/mapstore

...