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

时间:2016-05-19 16:27:16

标签: java caching ehcache ignite jcache

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

  • TouchedExpiryPolicy
  • 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>

参考文献:

1 个答案:

答案 0 :(得分:4)

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

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

您可以通过继承ExpiryPolicy

来设置个别时间

注意逻辑含义。访问后设置10秒到期,创建后设置30秒意味着:

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

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