javax.cache自动删除条目

时间:2016-05-05 07:38:13

标签: java java-ee caching

我有一个javax.cache.Cache实例,在10分钟不活动后,条目会被自动删除。如果不深入,是否有一个配置参数可以自动从缓存中删除键值对?

下面是代码段

@Produces
@FileRicAdapterService
public EventCacheFile getNamedEventsCache(InjectionPoint injectionPoint) {
    Cache<String, CachedRecord> cache = getPersistentCacheManager()
            .getCache("filetoric");

    return new EventCacheFileImpl(cache);
}

@Produces
public CacheManager getPersistentCacheManager() {
    return new CacheManagerAdapter(
            getCacheContainer(Constants.PERSISTENT_CACHE));
}

private EmbeddedCacheManager getCacheContainer(String name) {
    String jndiName = "java:jboss/infinispan/container/" + name;
    try {
        return (EmbeddedCacheManager) new InitialContext().lookup(jndiName);
    } catch (NamingException e) {
        logger.fatal("Cache container not found: %s", name);
        throw new UnsatisfiedResolutionException(
                "Cache container not found " + name);
    }
}

1 个答案:

答案 0 :(得分:1)

这可能不是一个答案,但评论的时间太长了。

你真的应该在你的问题中包含缓存JNDI配置。很难猜出你在做什么。但是,根据您提供的肤浅的详细信息,我相信您可以尝试使用以下元素来控制缓存逐出和过期,如Infinispan子系统documentation中所述:

  

<eviction>

     

此子元素配置缓存的逐出行为。

     
      
  • strategy:此属性配置缓存逐出策略。可用选项包括UNORDEREDFIFOLRULIRSNONE(禁用驱逐)。

  •   
  • max-entries:此属性配置缓存实例中的最大条目数。如果选择的值不是2的幂,则实际值将默认为大于所选值的2的最小功率。 -1表示没有限制。

  •   
  

<expiration>

     

此子元素配置缓存的过期行为。

     
      
  • max-idle:此属性配置缓存条目将在缓存中保留的最长空闲时间(以毫秒为单位)。如果超过空闲时间,则该条目将在群集范围内过期。 -1表示条目永不过期。

  •   
  • lifespan:此属性配置缓存条目的最长生命周期,之后条目在群集范围内过期,以毫秒为单位。 -1表示条目永不过期。

  •   
  • interval:此属性指定从内存和任何缓存存储中清除过期条目的后续运行之间的间隔(以毫秒为单位)。如果您希望完全禁用定期逐出流程,请将wakeupInterval设置为-1

  •