2016-04-27 25 views
0

Mein Cache wird Elemente haben, die möglicherweise nicht synchron sind DB.Hazelcast IMap - Wie lösche ich alle Elemente auf loadAll (true)

Zum Beispiel In einigen Anwendungsfällen habe ich set/putTransient in IMap verwendet, so dass das Element nur im Cache enthalten ist.

IMap.loadAll (true) löscht diese nicht synchronisierten Elemente nicht aus dem Cache.

Advise bitte ...

Update: Mein Befehl reload

@JMXMethod 
    public void reload(){ 
     log.info("Reloading Cache - [{}] ... ", cachename()); 
      cache().loadAll(true); 
    } 
+0

Aus irgendeinem Grund die Daten löschen in DB und ich möchte den neuesten Dump von DB neu laden, wie man das erreicht? –

+0

Nicht sicher, ob ich Ihre Frage wirklich verstehe? Kannst du etwas mehr ausarbeiten? – noctarius

+0

Angenommen, EmployeeCache spiegelt das gesamte Element in der Employee-Tabelle in der DB wider. Eine andere Anwendung, die Zugriff auf die Datenbank hat, löscht den Datensatz für den Mitarbeiter A. Wenn ich meinen Cache neu lade(), sollte der Mitarbeiter - Ein Datensatz nicht im Cache sein. –

Antwort

0

einfach aufrufen map.clear() und dann map.loadAll (true)

+0

Wenn in der Zeitlücke zwischen .clear() und loadAll() der Cache eine Anforderung für ein Element erhält, gibt der Cache null zurück. –

+0

Nein, wenn Ihr Ladevorgang auf eiager eingestellt ist, löst in diesem Fall der get-Aufruf die Last aus, sodass Ihr expliziter Aufruf von loadAll übersprungen wird, da der Ladevorgang gerade ausgeführt wird. (oder es wird die Last erneut auslösen, wenn die Last ein paar Millis benötigt, aber das ist selten der Fall) –

+0

Ich habe mapStoreConfig.setInitialLoadMode (InitialLoadMode.EAGER); Wenn ich reload Ausgabe() nach zwei Stunden wurde der Cache geladen mit \t @JMXMethod \t public void reload() { \t \t log.info ("Nachladen Cache - [{}] ...", Cachenamen()) ; \t \t \t cache(). LoadAll (true); \t \t} –