如何使用多个过期策略配置 Apache Ignite 缓存

How to configure Apache Ignite cache with multiple expiry policies

例如,我想为缓存配置以下两个过期策略:

示例代码如下(Apache Ignite version 1.5.0.final):

public IgniteCache<String, Object> getOrCreateCache(String cacheName) {
    Ignite ignite = Ignition.ignite();

    CacheConfiguration<String, Object> cacheCfg = new CacheConfiguration<String, Object>(cacheName);
    cacheCfg.setExpiryPolicyFactory(TouchedExpiryPolicy.factoryOf(new Duration(TimeUnit.SECONDS, 10)));
    cacheCfg.setExpiryPolicyFactory(CreatedExpiryPolicy.factoryOf(new Duration(TimeUnit.SECONDS, 30)));

    IgniteCache<String, Object> igniteCache = ignite.getOrCreateCache(cacheCfg);
    return igniteCache;     
}

但是,问题是第二个到期策略将取代第一个。想知道是否有任何方法可以配置 Ignite 缓存,以便缓存遵守两种过期策略?谢谢。

顺便说一句,在EhCache中,我可以通过以下方式配置缓存来实现同样的事情:

<cache name="my-cache-name" ...
    timeToIdleSeconds="10" timeToLiveSeconds="30"
    ...>        
</cache>

参考文献:

回答一般的 JCache ExpiryPolicy,也许 Apache Ignite 中还有其他选项。

TouchedExpiryPolicy 使用相同的创建和更新持续时间。

您可以通过子类化 ExpiryPolicy 来设置单独的时间。

注意逻辑含义。设置访问后 10 秒过期和创建后 30 秒意味着例如:

  • 项目已创建,如果未访问则在缓存中保留 30 秒
  • 项目已创建,创建后 5 秒被访问,项目在创建后 15 秒过期(访问后 10 秒)

可能您想实现不同的目标。所以答案是:按照设计的方式混合 TTL 和 TTI 是不可能的。