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

Java 如何使用多个过期策略配置Apache Ignite缓存,java,caching,ehcache,ignite,jcache,Java,Caching,Ehcache,Ignite,Jcache,例如,我想使用以下两种过期策略配置缓存: 接触式扩张政策 CreatedExpiryPolicy 示例代码如下(Apache Ignite版本1.5.0.final): publiccache getOrCreateCache(字符串cacheName){ Ignite Ignite=点火。点火(); CacheConfiguration cacheCfg=新的CacheConfiguration(cacheName); cacheCfg.setExpiryPolicyFactory(Tou

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

  • 接触式扩张政策
  • CreatedExpiryPolicy
示例代码如下(Apache Ignite版本1.5.0.final):

publiccache getOrCreateCache(字符串cacheName){
Ignite Ignite=点火。点火();
CacheConfiguration cacheCfg=新的CacheConfiguration(cacheName);
cacheCfg.setExpiryPolicyFactory(TouchedExpiryPolicy.factoryOf(新的持续时间(TimeUnit.SECONDS,10));
cacheCfg.setExpiryPolicyFactory(CreatedExpiryPolicy.factoryOf(新的持续时间(TimeUnit.SECONDS,30));
IgniteCache IgniteCache=ignite.getOrCreateCache(cacheCfg);
返回缓存;
}
但问题是,第二个到期政策将取代第一个到期政策。不知是否有任何方法可以配置Ignite缓存,使缓存同时遵守两个过期策略?多谢各位

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


参考资料:


回答一般JCache ExpiryPolicy问题,Apache Ignite中可能还有其他选项

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

您可以通过子类化
ExpiryPolicy
来设置单个时间

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

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

也许你想取得一些不同的成就。因此答案是:TTL和TTI的混合不可能按其设计方式实现。

在Ignite中,每个缓存也可以全局设置一个
ExpirePolicy
。所以你所有的建议对我来说都是正确的。混合TTL和TTI的目的是在满足任何一个条件时使缓存过期,不管是哪一个条件。@Yuci,我理解你的意图。可能很多人想把这两个概念混为一谈。但它不是这样设计的。当一个项目过期时,只有一个活动持续时间,而不是两个。我在JSR107问题跟踪器中为此打开了一个问题,以获取更多关于此的意见:。也许在Ignite中还有其他方法可以实现这一点。您好,有关于此问题的更新吗?您好,您是否使用相同的Ignite缓存解决了此问题?