ヘッダーをスキップ
Oracle Coherenceクライアント・ガイド
リリース3.5
B56041-01
  目次
目次

戻る
戻る
 
次へ
次へ
 

16 .NETクライアント用ローカル・キャッシュの構成

ローカル・キャッシュは、特定の.NETアプリケーションに対してローカルである(つまりアプリケーション内に完全に含まれる)キャッシュです。ローカル・キャッシュの特に興味深い属性について、次に示します。

Coherence for .NETのローカル・キャッシュ機能は、Tangosol.Net.Cache.LocalCacheクラスによって実装されます。したがって、このキャッシュはプログラムでインスタンス化して構成することが可能ですが、Coherence for .NETの他のキャッシュ同様、LocalCacheはキャッシュ・コンフィギュレーション・ディスクリプタを使用して構成することをお薦めします。

ローカル・キャッシュの構成

ローカル・キャッシュの主要な構成要素は<local-scheme>です。ローカル・キャッシュは通常、ニアスキームのフロント層としてなど、他のキャッシュ・スキーム内にネストされています。したがって、この要素はcoherence-cache-configファイルの次の要素のいずれかのサブ要素として記述できます。<caching-schemes>、<distributed-scheme>、<replicated-scheme>、<optimistic-scheme>、<near-scheme>、<versioned-near-scheme>、<overflow-scheme>、<read-write-backing-map>および<versioned-backing-map-scheme>の各要素です。

<local-scheme>には、キャッシュの特性を定義できるいくつかのサブ要素がオプションで用意されています。たとえば、<low-units>および<high-units>サブ要素はキャッシュのサイズを制限します。キャッシュが最大許容サイズに達すると、指定されたエビクション・ポリシー(<eviction-policy>)に従って削除対象エントリが決定され、指定されたより小さなサイズに戻ります。エントリおよびサイズの制限は、該当するスキームの単位換算カリキュレータ(<unit-calculator>)で計算される単位で測定されます。

キャッシュの有効期間も制限できます。<expiry-delay>サブ要素は、前回の更新からエントリが期限切れとしてマークされるまでの、キャッシュでエントリが保持される期間を指定します。期限切れのエントリを読み取ろうとすると、構成済のキャッシュ・ストア(<cachestore-scheme>)からのエントリのリロードが発生します。期限切れになった値は、フラッシュ遅延に基づいてキャッシュから定期的に破棄されます。

<cachestore-scheme>が指定されていない場合、キャッシュされたデータはメモリー内に存在して、キャッシュに対して実行された操作を反映するだけになります。使用可能なすべてのサブ要素の詳細は、「<local-scheme>」を参照してください。

例16-1に、ローカル・キャッシュの構成を示します。その他の例については、「キャッシュ・コンフィギュレーションのサンプル」を参照してください。

例16-1 ローカル・キャッシュの構成

<?xml version="1.0"?>

<cache-config>
  <caching-scheme-mapping>
    <cache-mapping>
      <cache-name>example-local-cache</cache-name>
      <scheme-name>example-local</scheme-name>
    </cache-mapping>
  </caching-scheme-mapping>
  <caching-schemes>
    <local-scheme>
      <scheme-name>example-local</scheme-name>
      <eviction-policy>LRU</eviction-policy>
      <high-units>32000</high-units>
      <low-units>10</low-units>
      <unit-calculator>FIXED</unit-calculator>
      <expiry-delay>10ms</expiry-delay>
      <flush-delay>1000ms</flush-delay>
      <cachestore-scheme>
        <class-scheme>
          <class-name>ExampleCacheStore</class-name>
        </class-scheme>
      </cachestore-scheme>
      <pre-load>true</pre-load>
    </local-scheme>
  </caching-schemes>
</cache-config>

.NETクライアント用ローカル・キャッシュ参照の取得

CacheFactoryクラスを使用することによって、構成済ローカル・キャッシュへの参照を名前によって取得できます。

例16-2 ローカル・キャッシュへの参照の取得

INamedCache cache = CacheFactory.GetCache("example-local-cache");

ローカル・キャッシュに関連付けられたリソースのクリーンアップ

すべてのINamedCache実装のインスタンスは、LocalCacheを含め、不要になった時点でINamedCache.Release()メソッドをコールして明示的に解放し、これらのインスタンスで保持されているリソースをすべて解放する必要があります。

特定のINamedCacheがアプリケーションの継続期間を通して使用される場合、リソースはそのアプリケーションがシャットダウンされたとき、または停止したときにクリーンアップされます。ただし、わずかの間だけ使用される場合は、使い終わった時点でアプリケーションからRelease()メソッドをコールする必要があります。

または、INamedCacheIDisposableを拡張し、すべてのキャッシュ実装がIDisposable.Dispose()のコールをINamedCache.Release()に委任しているという事実を利用する方法もあります。つまり単一メソッド内でキャッシュ・インスタンスを取得および解放する必要がある場合、次のusingブロックを使用してそれを実現できます。

例16-3 ローカル・キャッシュへの参照の取得と解放

using (INamedCache cache = CacheFactory.GetCache("my-cache"))
{
   // use cache as usual
}

usingブロックが終了すると、INamedCacheインスタンスでIDisposable.Dispose()がコールされ、そのインスタンスに関連付けられているすべてのリソースが解放されます。