2

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

  • 触及到期政策
  • CreatedExpiryPolicy

示例代码如下(Apache Ignite 版本 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>

参考:

4

1 回答 1

4

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

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

您可以通过将ExpiryPolicy.

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

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

可能你想实现一些不同的东西。所以答案是:按照设计的方式混合 TTL 和 TTI 是不可能的。

于 2016-05-20T06:27:07.503 回答