Я использую кеш Infinispan. Есть ли способ получить TTL (или lifepsan) записей во время выполнения? Я вижу интерфейс CacheEntry
как getLifespan()
API, но не понимаю, как получить дескриптор интерфейса CacheEntry,
Спасибо
Я использую кеш Infinispan. Есть ли способ получить TTL (или lifepsan) записей во время выполнения? Я вижу интерфейс CacheEntry
как getLifespan()
API, но не понимаю, как получить дескриптор интерфейса CacheEntry,
Спасибо
Чтобы получить конфигурацию продолжительности жизни для всего кеша, вы можете использовать:
cache.getCacheConfiguration().expiration().lifespan();
и чтобы получить срок службы для конкретной записи, вы можете использовать:
cache.getAdvancedCache().getCacheEntry("key").getLifespan();
Надеюсь, это поможет!
Каждая запись кэша содержит информацию о:
Где Expiry Time = Max Idle + Last Used
Используйте эту информацию, чтобы узнать продолжительность жизни каждой записи кэша.
Метод CacheEntry.getLifeSpan()
не работает должным образом, получая срок жизни этой записи. Он возвращает -1, что означает неограниченный срок службы.
Вот пример кода:
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");
}
}
Вывод:
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