【问题标题】:Can infinispan passivation be used along with memory based eviction?infinispan 钝化可以与基于内存的驱逐一起使用吗?
【发布时间】:2020-02-26 00:37:44
【问题描述】:

使用

  • JBoss 7.1.0 EAP
  • Infinispan 8.2.8.Final-redhat-1

是否可以通过 infinispan 使用钝化和基于内存的驱逐?

当我尝试使用此配置时:

ConfigurationBuilder config = new ConfigurationBuilder();
config.clustering().cacheMode(CacheMode.DIST_SYNC);
config.eviction()
    .type(EvictionType.MEMORY) 
    .size(heapAllocationForCache);
config.persistence().passivation(true)
        .addSingleFileStore()
        .location("/path/to/cache-dir")
        .purgeOnStartup(true);

当我尝试这个配置时,我得到了这个错误:

2019-10-30 11:28:59 INFO [] EvictionConfigurationBuilder:114 - ISPN000152:在未选择驱逐策略的情况下配置了钝化。只有手动驱逐的实体才会被钝化。

这里是验证逻辑:

if (!strategy.isEnabled()) {
   if (maxEntries > 0) {
      strategy(EvictionStrategy.LIRS);
      log.debugf("Max entries configured (%d) without eviction strategy. Eviction strategy overriden to %s", maxEntries, strategy);
   } else if (getBuilder().persistence().passivation() && strategy != EvictionStrategy.MANUAL) {
      log.passivationWithoutEviction(); // <--------- this line is where the warning comes from
   }
}

你不能在 Passivation 中使用基于内存的驱逐吗?或者这是 Infinispan 8.2.x 验证的错误?

注意我们不能设置

strategy(EvictionStrategy.LRU) 等因为这段代码:

https://github.com/infinispan/infinispan/blob/8.2.11.Final/core/src/main/java/org/infinispan/configuration/cache/EvictionConfigurationBuilder.java

if (strategy.isEnabled() && maxEntries <= 0)
         throw new CacheConfigurationException("Eviction maxEntries value cannot be less than or equal to zero if eviction is enabled");

【问题讨论】:

    标签: jboss infinispan


    【解决方案1】:

    当您使用 EAP 时,我不会在 EAP 中使用 Infinispan 位,因为这并不意味着用于应用程序缓存 - 您也无法更新版本,因为这不受支持。 最好的方法是使用 RHDG 作为受支持的产品,或者(如果不能)使用最新的 Infinispan 版本来获得完整的功能集和最新的修复。 此外,在 9.x 中,您可以使用堆外内存,这通常会提供更好的性能。

    更多详情请看这篇帖子Unable to use Infinispan embedded cachemanager on JBoss EAP 7.2

    【讨论】:

      【解决方案2】:

      你应该可以的。但问题在于,在 8.2 中,默认策略是 NONE [1]。将策略设置为 LIRS 或 LRU 应该可以解决您的问题。新版本的 Infinispan 不再需要此设置,除非您想将其设置为 MANUAL eviction strategy。

      config.eviction()
         .type(EvictionType.MEMORY)
         .strategy(EvictionStrategy.LRU) 
         .size(heapAllocationForCache);
      

      [1]https://github.com/infinispan/infinispan/blob/8.2.x/core/src/main/java/org/infinispan/configuration/cache/EvictionConfiguration.java#L19

      【讨论】:

      • maxEntries 或 size 不能
      • 这对我来说没有意义,因为我想要内存驱逐......不算驱逐。这似乎是 9.x 后期修复的错误。我说的对吗?
      • 它们只是同名,只要你配置EvictionType.MEMORY,size参数就是驱逐时大概多少字节。
      猜你喜欢
      • 2019-03-17
      • 2014-11-23
      • 1970-01-01
      • 2015-11-07
      • 2013-12-14
      • 2014-08-02
      • 1970-01-01
      • 1970-01-01
      • 2014-10-27
      相关资源
      最近更新 更多