我正在使用Infinispan緩存。有什麼辦法在運行時獲得TTL(或lifepsan)條目嗎?我認爲作爲一個getLifespan()
API接口CacheEntry
,但我不知道怎麼去CacheEntry接口上的手柄,在運行時使用infinispan獲取TTL
感謝
我正在使用Infinispan緩存。有什麼辦法在運行時獲得TTL(或lifepsan)條目嗎?我認爲作爲一個getLifespan()
API接口CacheEntry
,但我不知道怎麼去CacheEntry接口上的手柄,在運行時使用infinispan獲取TTL
感謝
爲了得到壽命爲整個高速緩存的配置,你可以使用:
cache.getCacheConfiguration().expiration().lifespan();
,並獲得特定條目的壽命,你可以使用:
cache.getAdvancedCache().getCacheEntry("key").getLifespan();
希望幫助!
謝謝,但我只能看到AdvanceCache上的getEntry(Object,EnumSet,ClassLoader)。任何其他想法? –
如果您使用Infinispan <5.3,getCacheEntry(K key)實際上不存在,但getCacheEntry(key,null,null)應檢索相同的結果。 –
每個高速緩存條目包含以下信息:
凡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
你有沒有嘗試我的答案。請讓我知道如果它不工作。 – Braj