【问题标题】:javax.cache automatically removing entriesjavax.cache 自动删除条目
【发布时间】:2016-08-30 21:59:01
【问题描述】:

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

这里的代码是sn-p

@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);
    }
}

【问题讨论】:

  • 请在您声明缓存的地方发布代码。也请检查this answer
  • 在配置中查找过期策略

标签: java jakarta-ee caching


【解决方案1】:

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

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

&lt;eviction&gt;

这个子元素配置缓存的驱逐行为。

  • strategy:该属性配置缓存驱逐策略。可用选项有 UNORDEREDFIFOLRULIRSNONE(禁用驱逐)。

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

&lt;expiration&gt;

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

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

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

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

【讨论】:

  • 它是否默认设置为-1(永不过期)?我相信我们没有更改任何默认配置参数。如果默认情况下它是-1,那么我必须假设还有其他地方正在修改缓存。
  • @SyedAhmed 你真的需要 JNDI 吗?
  • 另一种选择是什么?我只是想用 HashMap 替换 Cache
  • @SyedAhmed 以编程方式创建缓存。类似于CacheManager cacheManager = new DefaultCacheManager(); Cache&lt;String, Object&gt; cache = cacheManager.getCache();。有机会我会尽快更新答案并提供更多详细信息。
  • 我已经在 inifinispan 缓存上调试了几个点的代码,并且寿命总是-1。但仍然出于某种原因,它会在 10 分钟后自动过期非活动记录!我很困惑
猜你喜欢
  • 1970-01-01
  • 2013-04-03
  • 1970-01-01
  • 2012-07-14
  • 2015-10-22
  • 2013-07-04
  • 2022-01-14
  • 2015-06-13
  • 2023-03-09
相关资源
最近更新 更多