2016-05-19 5 views
1

でのApacheのIgniteキャッシュを構成する方法、私は、次の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キャッシュを設定できる方法があれば驚くでしょうか?ありがとうございました。

<cache name="my-cache-name" ... 
    timeToIdleSeconds="10" timeToLiveSeconds="30" 
    ...>   
</cache> 

参考文献:

答えて

4
ところで

、Ehcacheの中で、私はキャッシュに以下の方法を設定することにより、同じことを達成することができます

一般的なJCache ExpiryPolicyのための応答、多分そこにApache Igniteの追加オプションです。

TouchedExpiryPolicyは、作成と更新に同じ時間を使います。

ExpiryPolicyをサブクラス化することで、個々の時刻を設定できます。

ロジックの意味に注意してください。作成は、たとえば意味の後にアクセスし、30秒後に10秒の有効期限を設定する:

  • 項目が作成され、アクセスしていない
  • 項目が作成された場合、キャッシュに30秒のまま、アイテム、作成後に5秒にアクセスされます作成後15秒経過すると(アクセス後10秒)

おそらく異なるものを達成したいと考えています。つまり、答えは:TTLとTTIを混合することは、それが設計された方法では不可能です。

+0

Igniteでは、キャッシュごとに1つの 'ExpirePolicy'だけをグローバルに設定することもできます。だからあなたの提案はすべて私のために正しいと思う。 – dmagda

+0

TTLとTTIを混在させる目的は、いずれかの基準が満たされたときにいつでもキャッシュを期限切れにすることです。 – Yuci

+0

@Yuci、あなたがしようとしていることを理解しています。おそらく多くの人が2つのコンセプトを組み合わせたいと思うでしょう。しかし、それはそのようには設計されていません。項目が期限切れになるのは2つではなく、有効期限は1つだけです。 JSR107の問題追跡ツールでこれに関する問題を開いて、これに関するいくつかの意見を得ました:https://github.com/jsr107/jsr107spec/issues/355。おそらく、これを達成するためにIgniteにはまだ別の方法があります。 – cruftex

関連する問題