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()がコールされ、そのインスタンスに関連付けられているすべてのリソースが解放されます。