在 Wildfly 10.1 上使用 JCache (Infinispan) 时,我偶然发现了以下问题。我创建了一个新的缓存(测试缓存),我在其中使用了 CreatedExpiryPolicy,持续时间为 5 分钟。
在玩过缓存之后,我注意到如果我两次放置相同的键,缓存条目将被转换为 ImmortalCacheEntry,因此该条目将永远保留在缓存中。我知道我可以通过使用 remove 和 put 进行更新来解决这个问题,但对我来说,这听起来像是 Infinspan 中的一个错误。
CreatedExpiryPolicy 中的 JavaDoc 清楚地表明更新对当前的到期持续时间没有影响。
CachingProvider cachingProvider = Caching.getCachingProvider();
CacheManager cacheManager = cachingProvider.getCacheManager();
MutableConfiguration<Object, Object> config = new MutableConfiguration<>()
.setTypes(Object.class, Object.class)
.setStoreByValue(true)
.setStatisticsEnabled(true)
.setManagementEnabled(true)
.setExpiryPolicyFactory(CreatedExpiryPolicy.factoryOf(new Duration(TimeUnit.MINUTES, 5)));
Cache<Object, Object> cache = cacheManager.createCache("test-cache", config);
cache.put("key", "value"); // MortalCacheEntry{key=key, value=value}}
cache.put("key", "value"); // ImmortalCacheEntry{key=key, value=value}}
摘自 javax.cache.expiry.CreatedExpiryPolicy
/**
* {@inheritDoc}
*/
@Override
public Duration getExpiryForUpdate() {
//updating a cache entry has no affect on the current expiry duration
return null;
}
任何人都可以帮助我澄清这是一个错误还是我使用错误?如果这是一个错误,我将创建一个新的 JIRA 问题。