1

在 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 问题。

4

0 回答 0