Enterprise Library:Caching Application Block概要

7740 ワード

Enterprise Library:Caching Application Block概要
 
Written by: Rickie Lee (rickieleemail#yahoo.com)
My blog: http://www.cnblogs.com/rickie
Enterprise LibraryのCaching Application Blockでは、開発者がアプリケーションでローカルキャッシュ(Cache)を使用することができます.これは、メモリキャッシュとオプションのアシストメモリ(Enterprise Library Data Access Application Blockまたはアイソレーションストレージ)をサポートします.このApplication Blockは、キャッシュ・データの取得、追加、削除のすべての機能を提供し、構成可能な有効期間およびパージ・ポリシー(Expiration and Scavenging Policies)も含まれます.
 
エンタープライズクラスの分散アプリケーションを作成する際、アーキテクチャおよび開発者は多くの課題に直面します.キャッシュ・テクノロジーは、次のような課題を克服するのに役立ちます.
パフォーマンス(Performance):関連するデータをできるだけデータ消費者に近づけることで、キャッシュはアプリケーションのパフォーマンスを提供します.これにより、重複するデータの作成、処理、および転送を回避できます.

拡張性(Scalability):アプリケーションのニーズが増加するにつれて、キャッシュ情報はリソースの節約と拡張性の向上に役立ちます.

可用性(Availability):ローカルキャッシュにデータを格納することで、ネットワーク遅延、Webサービスの問題、ハードウェアの障害などのシステム障害を回避できます.

 
Caching Application Blockは次の場合に適用されます.
静的データまたは変更の少ないデータに繰り返しアクセスする必要があります.

データ・アクセスは、作成、アクセス、または転送方法のコストが高い.

ソース・サーバがアクセスできない場合でも、データは常にアクセスできる必要があります.

また、Caching Application Blockは、Windows Forms、Console Application、Windows Services、COM+Server、ASP.NET Web Application and Web Service(ASP.NET cacheに含まれない機能と機能を使用する必要がある場合)のアプリケーションタイプで使用できます.
 
Caching Application Blockは単一のアプリケーションドメインに配備する必要があります.各アプリケーションドメインには複数のキャッシュがあり、キャッシュは異なるアプリケーションドメイン間で共有できません.Caching Application Blockのパフォーマンスが最適化され、スレッドセキュリティと例外セキュリティ(Exception Safe)は、有効期間ポリシーと補助メモリをカスタマイズすることで拡張できます.
 
Caching Application Blockの構成
(1)コンフィギュレーション管理ツールでCaching Application Blockを追加すると、必要に応じて複数のCache Managerを作成できるCache Managerがデフォルトで作成されます.
(2)ここでCache ManagerをDefault Cache Managerと改名し、Caching Application BlockノードのDefaultCacheManagerプロパティをDefault Cache Managerに設定します.
(3)Default Cache Managerを選択し、右側のパネルに対応する属性とその属性値を表示します.
ExpirationPollFrequencyInSeconds:BackgroundSchedulerが期限切れのデータ・アイテムをポーリングする頻度(秒単位)を設定し、デフォルト値は60秒です.
M a x i m u m E l e m e n t s InCacheBeforeScavenging:キャッシュ内のデータ・アイテムのパージを開始する前に、キャッシュに含めることができる最大データ・アイテムを1000に設定します.
Name:Cache Managerの名前.
NumberToRemoveWhenScavenging:キャッシュ内のデータ・アイテムのパージを開始するたびにパージされるデータ・アイテムを設定します.デフォルトは10です.
(4)Default Cache Managerを選択し、Cache Storageを追加または設定します.デフォルトでは、データ・アイテムのみがメモリにキャッシュされ、セカンダリ・ストレージのプロパティ値がNull BackingStoreに設定されます.Backing StorageをData Cache StorageまたはIsolated Storageに設定することもできます.
Data Cache Storageは、Database ProviderとしてData Access Applicationを使用し、キャッシュデータをデータベースに格納します.Caching Application Blockには、対応するデータベースSchemaを作成するためのSQL SCRIPTがあります.
C:\Program Files\Microsoft Enterprise Library\src\Caching\Scripts\CreateCachingDb.cmd
Caching Application BlockのConfiguration Consoleインタフェースは以下の通りです.
Enterprise Library: Caching Application Block概述_第1张图片
 
Proactive loadingとReactive loading
データ・キャッシュを使用すると、アプリケーションのパフォーマンスが得られます.次の2つの方法でデータをキャッシュにロードします.
Proactive loading:このメソッドは、まず必要なすべてのデータを取得し、アプリケーションまたはプロセスのライフサイクル全体でデータをキャッシュします.
Reactive loading:このメソッドは、アプリケーションの必要に応じて必要なデータを取得し、将来のリクエストのためにキャッシュに保存します.
Proactive loadingとReactive loadingの長所と短所、適用状況については、Caching Application BlockのLoading the Cacheドキュメントを参照してください.
 
Caching Application Blockを呼び出すコード・スライス
まずMicrosoft.Practices.EnterpriseLibrary.Caching.dllを参照し、コードに追加する必要があります.
using Microsoft.Practices.EnterpriseLibrary.Caching;
(1)キャッシュへのデータ項目の追加
private CacheManager primitivesCache;
//Use the default cache manager for the primitive operations
this.primitivesCache = CacheFactory.GetCacheManager();
//キャッシュデータ項目の作成
Product product = new Product(
          this.enterNewItemForm.ProductID,
          this.enterNewItemForm.ProductShortName,
          this.enterNewItemForm.ProductPrice);
//CacheManagerを呼び出すAddメソッド
primitivesCache.Add(product.ProductID, product);
 
上記のコードはCacheManager.Add(key,value)メソッドを呼び出し、データ項目をキャッシュに入れます.これはAddメソッドの比較的簡単なリロードです.このAddメソッドで追加されたデータ項目は期限切れにならず、CacheItemPriorityプロパティをNormalに設定します.
 
同じkeyのデータ・アイテムがキャッシュにすでに存在する場合は、既存のデータ・アイテムを削除し、新しいデータ・アイテムを追加します.処理中に例外が発生した場合、キャッシュはそのままです.
 
また、CacheManager.Addメソッドには、次のようなリロードがあります.
public void Add(
   string key,
   object value,
   CacheItemPriority scavengingPriority,
   ICacheItemRefreshAction refreshAction,
   params ICacheItemExpiration[] expirations
);
scavengingPriorityは、新しいデータ・アイテムのscavenging優先度を指定します.
refreshAction:このオブジェクトは、キャッシュ内の期限切れデータ項目の更新を許可します.
expirations:Param配列は、nullまたは無視できるデータ・アイテムの有効期間ポリシーを指定します.
 
(2)データ項目をキャッシュから削除
//Request that the item be removed from the cache.
this.primitivesCache.Remove(product.ProductID);
itemがキャッシュに存在しない場合、Removeメソッドは何もしません.
 
(3)キャッシュからのデータの取得
//Read the item from the cache. If the item is not found in the cache, the
//return value will be null.
Product product = (Product) this.primitivesCache.GetData(product.ProductID);このitemがキャッシュに存在しない場合はnull値を返します. 
4
this.primitivesCache.Flush();

  
  

***
作者:Rickie Lee(rickieleemail#yahoo.com)
Microsoft Enterprise LibraryのCaching Application BlockドキュメントとQuickStartを参照してください.
 
References:
1. Microsoft Enterprise Library: Caching Application Block.
2.Rickie,Microsoft patterns&practices Enterprise Library January 2005[中国語稿],http://www.cnblogs.com/rickie/archive/2005/01/30/99443.html
3. Rickie, Enterprise Library released! http://www.cnblogs.com/rickie/archive/2005/01/29/99106.html