Hazelcast обеспечивает предварительную загрузку Near Cache на члене
У меня есть вариант использования, когда мне нужно убедиться, что данные загружены в ближайший кеш, прежде чем работать с ними. Я использую Hazelcast в качестве поставщика Cache Manager. Я храню данные в ближайшем кеше вOBJECT
в формате памяти и кэшировать локальные записи. При запуске приложения я делаю теплый кеш, вызывая кешированный метод службы:
@Override
public void onApplicationEvent(final ApplicationReadyEvent applicationReadyEvent) {
applicationReadyEvent.getApplicationContext().getBean(MyService.class).myCachedMethod(); //1 warm cahce
applicationReadyEvent.getApplicationContext().getBean(MyService.class).myCachedMethod(); //2 warm near cache here
MyData myData = applicationReadyEvent.getApplicationContext().getBean(MyService.class).myCachedMethod(); // 3 warm near cache here
//4
//work with data from near cache here
myDtata.doStufff();
}
После этого я вызываю один и тот же метод несколько раз, чтобы загрузить данные в ближайший кеш. Проблема в том, что иногда кэш не загружается, когда я пытаюсь работать с данными метода. Похоже, что Near Cache загружается асинхронно, и я продолжаю получать данные не из ближайшего кеша на шаге 4. Итак, мой вопрос - есть ли способ сделать возможной предварительную загрузку NearCache или гарантировать, что в определенной точке NearCache заполнен? Даже если это означает подождать некоторое время, пока он заполнится, перед использованием. ДобавлениеThread.sleep()
помогает мне, но это никуда не годится. Версия Hazelcast3.11.4
Любая помощь приветствуется.
1 ответ
Вы можете предварительно загрузить Near Cache, используя <preloader>
элемент конфигурации. См. Следующий пример конфигурации, аналогичный конфигурации из Справочного руководства:
<near-cache name="myDataStructure">
<in-memory-format>OBJECT</in-memory-format>
<preloader enabled="true"
directory="nearcache-example"
store-initial-delay-seconds="600"
store-interval-seconds="600"/>
</near-cache>