ローカル・キャッシュは、特定のC++アプリケーションに対してローカルである(つまりアプリケーション内に完全に含まれる)キャッシュです。ローカル・キャッシュの特に興味深い属性について、次に示します。
ローカル・キャッシュはリモート・キャッシュと同じインタフェースを実装します。つまり、ローカル・キャッシュを使用することとリモート・キャッシュを使用することにプログラミング上の違いはありません。
ローカル・キャッシュのサイズは制限できます。つまり、ローカル・キャッシュでは、キャッシュするエントリ数を制限し、キャッシュがいっぱいになったらエントリを自動的に削除できます。さらに、エントリのサイジングとエビクション・ポリシーの両方をカスタマイズできます。たとえば、キャッシュされたエントリで使用されるメモリーに基づいてキャッシュ・サイズを制限できます。デフォルトのエビクション・ポリシーでは、対数曲線で測定された、最も頻繁に使用する(MFU)情報と最後に使用した(MRU)情報の組合せを使用して削除するキャッシュ項目が決定されます。このアルゴリズムは、短期キャッシュと長期キャッシュの両方に対して十分に機能し、頻度と新しさのバランスをとってキャッシュ・スラッシングを回避するため、最適な汎用エビクション・アルゴリズムであるといえます。また、ピュアLRUアルゴリズムおよびピュアLFUアルゴリズムがサポートされ、カスタム・エビクション・ポリシーのプラグイン機能もサポートされています。
ローカル・キャッシュはキャッシュ・エントリの自動失効をサポートしています。つまり、キャッシュ内の各キャッシュ・エントリにTTL値を割り当てることができます。さらに、定期的または事前に設定した時刻にフラッシュするようキャッシュ全体を構成できます。
ローカル・キャッシュはスレッド・セーフで、高い並行性を備えています。
ローカル・キャッシュでは、キャッシュのget統計が提供されます。ここには、キャッシュ・ヒットおよびキャッシュ・ミスの統計情報が保持されます。これらの実行時統計を使用すれば、キャッシュの有効性を正確に推定できるため、キャッシュ実行時にサイズ制限や自動失効の設定を適宜調整できます。
詳細は、『Oracle Coherenceスタート・ガイド』の「ローカル・キャッシュ」を参照してください。
ローカル・キャッシュの主要な構成要素は<local-scheme>
です。ローカル・キャッシュは通常、ニアスキームのフロント層としてなど、他のキャッシュ・スキーム内にネストされています。したがって、この要素はcoherence-cache-config
ファイルの次の要素のいずれかのサブ要素として記述できます。<caching-schemes>
、<distributed-scheme>
、<replicated-scheme>
、<optimistic-scheme>
、<near-scheme>
、<versioned-near-scheme>
、<overflow-scheme>
、<read-write-backing-map-scheme>
および<versioned-backing-map-scheme>
の各要素です。
<local-scheme>
には、キャッシュの特性を定義できるいくつかのサブ要素がオプションで用意されています。たとえば、<low-units
>
および<high-units>
サブ要素はキャッシュのサイズを制限します。キャッシュが最大許容サイズに達すると、指定されたエビクション・ポリシー(<eviction-policy>
)に従って削除対象エントリが決定され、指定されたより小さなサイズに戻ります。エントリおよびサイズの制限は、該当するスキームの単位換算カリキュレータ(<unit-calculator>
)で計算される単位で測定されます。
キャッシュの有効期間も制限できます。<expiry-delay
>サブ要素は、前回の更新からエントリが期限切れとしてマークされるまでの、キャッシュでエントリが保持される期間を指定します。期限切れのエントリを読み取るには、構成済のキャッシュ・ストア(<cachestore-scheme>
)からエントリをリロードすることになります。期限切れになった値は、フラッシュ遅延に基づいてキャッシュから定期的に破棄されます。
<cache-store-scheme>
が指定されていない場合、キャッシュされたデータはメモリー内に存在して、キャッシュに対して実行された操作を反映するだけになります。使用可能なすべてのサブ要素の詳細は、「<local-scheme>
」を参照してください。
例7-1(XMLコード)に、ローカル・キャッシュの構成を示します。その他の例については、「キャッシュ・コンフィギュレーションのサンプル」を参照してください。
例7-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>
CacheFactory
クラスを使用することによって、構成済ローカル・キャッシュへの参照を名前によって取得できます。
NamedCache::Handle hCache = CacheFactory::GetCache("example-local-cache");
すべてのNamedCache
実装のインスタンスは、LocalCache
を含め、不要になった時点でNamedCache::Release()
メソッドをコールして明示的に解放し、インスタンスで保持されているリソースをすべて解放する必要があります。
特定のNamedCache
がアプリケーションの継続期間を通して使用される場合、リソースはそのアプリケーションがシャットダウンされたとき、または停止したときにクリーンアップされます。ただし、わずかの間だけ使用される場合は、使い終わった時点でアプリケーションからRelease()メソッドをコールする必要があります。