2016-07-26 23 views
0

サービスXXXからの読み取り操作を実行するクラスがあります。これらの読み取り操作は最終的にDB読み取りを実行し、クラス内の各メソッドの結果をメソッドごとに指定されたカスタムキー用にキャッシュすることで、これらの呼び出しを最適化します。Springでの自動キャッシュ無効化

Class a { 

    public Output1 func1(Arguments1 ...) { 
    ... 
    } 

    public Output2 func2(Arguments2 ...) { 
    ... 
    } 

    public Output3 func3(Arguments3 ...) { 
    ... 
    } 

    public Output4 func4(Arguments4 ...) { 
    ... 
    } 
} 

私は、これらの方法のそれぞれのキャッシュ結果の春caching(@Cacheable annotation)を使用して考えています。

しかし、私はキャッシュの無効化をいくつかのメカニズム(ttlなど)によって自動的に行うようにしたいと思います。 Springキャッシングで可能ですか? @CacheEvict注釈があることを理解していますが、その削除が自動的に行われるようにしたいと思います。

ご協力いただければ幸いです。

答えて

5

Spring documentation(セクション36.8)によると:私はTTL/TTI /立ち退きポリシー/ XXX機能を設定するにはどうすればよい

キャッシュプロバイダを直接経由します。キャッシュの抽象化は... よく、抽象化はキャッシュの実装ではありません。他のソリューション(JDK ConcurrentHashMapなど)を使用しないさまざまなデータポリシーと異なるトポロジ をサポートする可能性があります。キャッシュ抽象化では、バッキングサポートがないため単純に役に立たないでしょう。それを設定するか、そのネイティブAPIを通じてとき、そのような 機能が 、バッキング・キャッシュを介して直接制御する必要があります。@

これは、春には直接キャッシュに生存時間を設定するためのAPIを公開し、代わりにリレーしないことを意味しますこれを設定するプロバイダの実装。つまり、キャッシング・プロバイダがこれらの属性の動的セットアップを許可している場合、公開されたキャッシュ・マネージャを介してTimeを設定する必要があります。あるいは、@CacheableアノテーションでSpringが使用しているキャッシュ領域を自分で設定する必要があります。

@Cacheableが公開しているキャッシュ領域の名前を見つけるためです。 JMXコンソールを使用して、アプリケーションで使用可能なキャッシュ領域をブラウズできます。

あなたはキャッシュ領域あなたは、このようなXML構成を提供することができます知っていればあなたが例えばEHCacheを使用している場合:再度

<cache name="myCache" 
     maxEntriesLocalDisk="10000" eternal="false" timeToIdleSeconds="3600" 
     timeToLiveSeconds="0" memoryStoreEvictionPolicy="LFU"> 
</cache> 

私が扱うときに、すべての設定は、インターフェイスを公開しないのキャッシュプロバイダ固有と春で繰り返しそれと。

備考:キャッシュプロバイダが定義されていない場合にSpringによって構成されるデフォルトのキャッシュプロバイダはConcurrentHashMapです。 Time To Liveのサポートはありません。この機能を使用するには、別のキャッシュプロバイダ(EHCacheなど)に切り替える必要があります。

+0

基本的なスプリングキャッシングの設定をttlに設定できますか?私はhttp://docs.spring.io/spring/docs/current/spring-framework-reference/html/cache.htmlにある文書にttl関連の設定が見つかりませんでした –

+0

こんにちは@KumarMrinal私は残念ですあなたがSpringによって設定されたデフォルトのキャッシュはConcurrentHashMapであり、これはTime Liveをサポートしていません。つまり、あなたがサポートしている別のプロバイダに切り替える必要があります。前述のEHCacheは、非分散型キャッシュ・プロバイダにとっては良い選択です。 –

+1

@AlexanderPetrov素晴らしい回答です。キャッシュプロバイダ(あなたの答えで言及したEhCacheのような)へのリンクと、引用文を入手したSpringリファレンスドキュメントへのリンクを提供する方が良いでしょう。 –

関連する問題