2014-02-27 3 views
7

Ich verwende den Infinispan Cache. Gibt es eine Möglichkeit, die TTL (oder Lebenszeichen) von Einträgen zur Laufzeit zu bekommen? Ich sehe die Schnittstelle CacheEntry als getLifespan() API, aber ich sehe nicht, wie auf Cacheentry-Schnittstelle einen Griff zu bekommen,Holen Sie sich die TTL zur Laufzeit mit Infinispan

Dank

+0

Haben Sie meine Antwort versucht. Bitte lassen Sie mich wissen, wenn es nicht funktioniert. – Braj

Antwort

6

Um die Konfiguration Lebensdauer für gesamte Cache zu erhalten, können Sie verwenden:

cache.getCacheConfiguration().expiration().lifespan(); 

und Lebensdauer für bestimmten Eintrag zu erhalten, können Sie:

cache.getAdvancedCache().getCacheEntry("key").getLifespan(); 

Hoffnung, das hilft!

+0

Danke, aber ich sehe nur getEntry (Object, EnumSet, ClassLoader) auf dem AdvanceCache. irgendwelche anderen Ideen? –

+1

Wenn Sie Infinispan <5.3 verwenden, ist getCacheEntry (K-Schlüssel) nicht wirklich vorhanden, aber getCacheEntry (Schlüssel, null, null) sollte dasselbe Ergebnis abrufen. –

2

Jeder Cache-Eintrag enthält Informationen über:

  • Zuletzt verwendete
  • Max Idle
  • Ablaufzeit

Wo Expiry Time = Max Idle + Last Used

Verwenden Sie diese Informationen, um die Lebensdauer von jedem zu bekommen Cache-Eintrag

Methode CacheEntry.getLifeSpan() funktioniert nicht wie erwartet, die die Lebensdauer dieses Eintrags abruft. Es gibt -1 zurück, was eine unbegrenzte Lebensdauer bedeutet.

Hier ist ein Beispielcode:

import org.infinispan.Cache; 
import org.infinispan.configuration.cache.CacheMode; 
import org.infinispan.configuration.cache.ConfigurationBuilder; 
import org.infinispan.container.entries.CacheEntry; 
import org.infinispan.container.entries.TransientCacheEntry; 
import org.infinispan.manager.DefaultCacheManager; 
import org.infinispan.manager.EmbeddedCacheManager; 

public class InfinispanTTL { 

    public static void main(String[] args) throws InterruptedException { 
     System.out.println("start"); 

     ConfigurationBuilder confBuilder = new ConfigurationBuilder(); 
     // confBuilder.eviction().strategy(EvictionStrategy.NONE).maxEntries(3); 
     confBuilder.expiration().lifespan(5000); 
     confBuilder.clustering().cacheMode(CacheMode.LOCAL); 

     EmbeddedCacheManager cacheManager = new DefaultCacheManager(confBuilder.build()); 
     cacheManager.start(); 

     Cache<String, CacheEntry> sessionCache = cacheManager.getCache("session"); 
     System.out.println("Strategy used by container=" 
       + sessionCache.getCacheConfiguration().eviction().strategy()); 
     System.out.println("Lifespan of container=" 
       + sessionCache.getCacheConfiguration().expiration().lifespan()); 

     TransientCacheEntry cacheEntry = new TransientCacheEntry("a", "1", 1000, 2000); 

     System.out.println("Expiry Time = Max Idle + Last Used"); 
     System.out.println("Max Idle=" + cacheEntry.getMaxIdle()); 
     System.out.println("Last Used=" + cacheEntry.getLastUsed()); 
     System.out.println("Expiry Time=" + cacheEntry.getExpiryTime()); 

     sessionCache.put("a", cacheEntry); 

     System.out.println("Expirt Time from session cache=" 
       + ((TransientCacheEntry) sessionCache.get("a")).getExpiryTime()); 
     System.out.println("Old value=" + sessionCache.get("a").getValue()); 
     System.out.println("Set value"); 
     sessionCache.get("a").setValue("3"); 
     System.out.println("New value=" + sessionCache.get("a").getValue()); 

     System.out.println("Expirt Time from session cache=" 
       + ((TransientCacheEntry) sessionCache.get("a")).getExpiryTime()); 
     System.out.println("finish"); 
    } 

} 

Ausgang:

Strategy used by container=NONE 
Lifespan of container=5000 
Expiry Time = Max Idle + Last Used 
Max Idle=1000 
Last Used=2000 
Expiry Time=3000 
Life span from session cache=-1 
Expiry Time from session cache=3000 
Old value=1 
Set value 
New value=3 
Expiry Time from session cache=3000 
Verwandte Themen