Получите TTL во время выполнения с помощью Infinispan

Я использую кеш Infinispan. Есть ли способ получить TTL (или lifepsan) записей во время выполнения? Я вижу интерфейс CacheEntry как getLifespan() API, но не понимаю, как получить дескриптор интерфейса CacheEntry,

Спасибо


person Breako Breako    schedule 27.02.2014    source источник
comment
Вы пробовали мой ответ. Пожалуйста, дайте мне знать, если он не работает.   -  person Braj    schedule 10.03.2014


Ответы (2)


Чтобы получить конфигурацию продолжительности жизни для всего кеша, вы можете использовать:

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

и чтобы получить срок службы для конкретной записи, вы можете использовать:

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

Надеюсь, это поможет!

person jholusa    schedule 04.03.2014
comment
Спасибо, но я вижу только getEntry(Object, EnumSet, ClassLoader) в AdvanceCache. любые другие идеи? - person Breako Breako; 04.03.2014
comment
В случае, если вы используете Infinispan ‹ 5.3, getCacheEntry(K key) на самом деле нет, но getCacheEntry(key, null, null) должен получить тот же результат. - person Radim Vansa; 06.03.2014

Каждая запись кэша содержит информацию о:

  • Последний используемый
  • Макс. холостой ход
  • Срок действия

Где 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
person Braj    schedule 07.03.2014