2

たとえば、次の 2 つの有効期限ポリシーを使用してキャッシュを構成したいと考えています。

  • 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;     
}

ただし、問題は、2 番目の有効期限ポリシーが最初の有効期限ポリシーに取って代わることです。キャッシュが両方の有効期限ポリシーを尊重するように、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 に答える