Oleg Kuts
Oleg Kuts

Reputation: 829

Hazelcast ensure Near Cache preload on Member

I have a use-case where I need to ensure that the data is loaded to near cache, before working with it. I am using Hazelcast as Cache Manager provider. I do store data in near cache in OBJECT in-memory-format, and do cache local entries. On application start up I do warm cache by calling service cached method:

      @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();
      }

After it I do call same method several times, to load data into near cache. Issue is that some times near cache is not loaded by the time I try to work with method data. It looks like Near Cache is loaded asynchronously, and I keep receiving data not from near cache at step 4. So my question is - is there any way to make NearCache preload possible, or to ensure that at particular point NearCache is populated? Even if that mean to wait for some time for it to get populated, before using. Adding Thread.sleep() does the trick for me, but this is by no means way to go. Hazelcast version is 3.11.4

Any help appreciated.

Upvotes: 0

Views: 511

Answers (1)

Isaac Sumner
Isaac Sumner

Reputation: 1

You can preload the Near Cache using the <preloader> configuration element. See the following example config similar to one from the Reference Manual:

<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>

Upvotes: 0

Related Questions