在Wildfly 10.1上使用JCache(Infinispan)时,我偶然发现了以下问题。我创建了一个新的缓存(test-cache),其中我使用了CreatedExpiryPolicy,持续时间为5分钟。
在使用缓存后,我注意到如果我将相同的密钥放两次,缓存条目将转换为ImmortalCacheEntry,因此该条目将永远保留在缓存中。我知道我可以通过使用删除和更新来解决这个问题,但对我来说这听起来像是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问题。