Coherence for .NETでのニア・キャッシュは、リードスルー/ライトスルー方式を使用してフロント・キャッシュとバック・キャッシュをラップするINamedCache
実装です。バック・キャッシュがIObservableCache
インタフェースを実装している場合、ニア・キャッシュはListen
None
、Listen
Present
、Listen
All
、Listen
Auto
のいずれかの方針を使用して、バック・キャッシュで変更された可能性のあるフロント・キャッシュ・エントリを無効化します。
ニア・キャッシュ、Listen*
無効化方針およびリードスルー/ライトスルー方式の詳細は、『Oracle Coherenceスタート・ガイド』の「ニア・キャッシュ」を参照してください。
Tangosol.Net.Cache.NearCache
クラスを使用すると、.NETニア・キャッシュ機能をプログラムでインスタンス化して構成できます。ただし、ニア・キャッシュの構成にはキャッシュ・コンフィギュレーション・ディスクリプタを使用することをお薦めします。
一般的なニア・キャッシュは、ローカル・キャッシュ(スレッド・セーフで並行性が高く、かつサイズが制限されていて自動的に失効するローカル・キャッシュ)をフロント・キャッシュとして使用し、リモート・キャッシュをバック・キャッシュとして使用するように構成されます。ニア・キャッシュの構成には、2つの子要素を持つnear-scheme
要素が使用されます。1つはローカル(フロント)キャッシュを構成するためのfront-scheme
、もう1つはリモート(バック)キャッシュを定義するためのback-scheme
です。
ニア・キャッシュは、coherence-cache-config
ファイルの<near-scheme
>要素を使用して構成します。この要素には、ローカル(フロント層)キャッシュを構成するためのfront-schemeと、リモート(バック層)キャッシュを定義するためのback-schemeの2つのサブ要素が要求されます。フロント層には通常、ローカル・キャッシュ(<local-scheme
>)を選択しますが、JVMヒープ・ベース以外のキャッシュ(<external-scheme
>または<paged-external-scheme
>)またはJavaオブジェクトに基づくスキーム(<class-scheme
>)も使用できます。
リモート、すなわちバック層のキャッシュは、<back-scheme>
要素を使用して記述します。バック層のキャッシュには、分散キャッシュ(<distributed-scheme
>)またはリモート・キャッシュ(<remote-cache-scheme
>)を定義できます。<remote-cache-scheme
>要素を使用すると、現在のクラスタの外部からクラスタ・キャッシュを使用できます。
<near-scheme
>のオプションのサブ要素には、フロント層とバック層のオブジェクトの同期を維持する方法を指定する<invalidation-strategy>
、およびキャッシュで発生したイベントの通知を受け取るリスナーを指定する<listener
>などがあります。
構成例については、「ニア・キャッシュ・コンフィギュレーションのサンプル」を参照してください。ファイルに含まれる各要素の詳細は、<near-scheme
>の項を参照してください。
すべてのINamedCache
実装のインスタンスは、NearCache
を含め、不要になった時点でINamedCache.Release()
メソッドをコールして明示的に解放し、インスタンスで保持されているリソースをすべて解放する必要があります。
特定のINamedCache
がアプリケーションの継続期間を通して使用される場合、リソースはそのアプリケーションがシャットダウンされたとき、または停止したときにクリーンアップされます。ただし、わずかの間だけ使用される場合は、使い終わった時点でアプリケーションからRelease()
メソッドをコールする必要があります。
または、INamedCache
がIDisposable
を拡張し、すべてのキャッシュ実装がIDisposable.Dispose()
のコールをINamedCache.Release()
に委任しているという事実を利用する方法もあります。つまり単一メソッド内でキャッシュ・インスタンスを取得および解放する必要がある場合、次のusingブロックを使用してそれを実現できます。
例17-2 ニア・キャッシュへの参照の取得と解放
using (INamedCache cache = CacheFactory.GetCache("my-cache")) { // use cache as usual }
usingブロックが終了すると、INamedCache
インスタンスでIDisposable.Dispose()
がコールされ、そのインスタンスに関連付けられているすべてのリソースが解放されます。