Get TTL at runtime with infinispan

I use the Infinispan cache. Is there a way to get TTL (or lifepsan) records at runtime? I see the CacheEntry interface as the getLifespan() API, but I do not see how to get the CacheEntry interface handle.

thanks

+7
infinispan
source share
2 answers

To get the lifespan configuration for the entire cache, you can use:

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

and to get the lifespan for a particular record, you can use:

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

Hope this helps!

+6
source share

Each cache entry contains information about:

  • Last used
  • Max idle
  • Expiration time

Where Expiry Time = Max Idle + Last Used

Use this information to get the lifetime of each cache entry.

The CacheEntry.getLifeSpan() method does not work as expected, which returns the lifetime of this record. It returns -1, which means unlimited lifetime.

Here is a sample code:

 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"); } } 

Output:

 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 
+2
source share

All Articles