如何使用多个过期策略配置 Apache Ignite 缓存
How to configure Apache Ignite cache with multiple expiry policies
例如,我想为缓存配置以下两个过期策略:
- TouchedExpiryPolicy
- 已创建到期策略
示例代码如下(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 是不可能的。
例如,我想为缓存配置以下两个过期策略:
- TouchedExpiryPolicy
- 已创建到期策略
示例代码如下(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 是不可能的。