プログラミング モデル (AppFabric 1.1 キャッシュ)

現在、Microsoft AppFabric 1.1 for Windows Server に使用できるプログラミング モデルは 2 つあります。

  • キャッシュ アサイド プログラミング パターン。つまり、データがキャッシュにない場合は、AppFabric 分散キャッシュではなくアプリケーションが、元のデータ ソースからキャッシュへのデータの再ロードを行う必要があります。

  • リード スルー/ライト ビハインド プログラミング パターン。このモデルでは、カスタム プロバイダーを作成してバックエンド データ ストアにアクセスします。アイテムがキャッシュ内にない場合、プロバイダーはバックエンドからアイテムを取得します。アイテムがキャッシュに書き込まれると、書き込まれたアイテムは定期的かつ非同期的にバックエンドに書き込まれます。このモデルの詳細については、「リード スルーおよびライト ビハインド (AppFabric 1.1 キャッシュ)」を参照してください。

キャッシュの方策

アプリケーションのコードは、キャッシュに依存しないで動作でき、キャッシュ データを常に使用できることが必須条件ではないように、設計する必要があります。キャッシュ内のデータは永続的には保持されないので、キャッシュ内のデータを使用できない場合があります。

クラスターの稼働中は、高可用性機能によって、個別のキャッシュ ホストによるコンピューターおよびプロセスの障害からは保護されます。しかし、クラスター全体がダウンする可能性があります。たとえば、多くのリード ホストがダウンした場合、クラスター全体がシャットダウンします。詳細については、「リード ホストとクラスター管理 (AppFabric 1.1 キャッシュ)」を参照してください。

他にもさまざまな理由で、キャッシュにデータがない場合があります。たとえば、キャッシュ アイテムの有効期限が切れた、キャッシュ アイテムが削除された、キャッシュ サーバーが再起動された、キャッシュ サービスが再起動された、キャッシュ クラスターが誤って再起動された、などの状況が発生する可能性があります。理由に関係なく、アプリケーション コードはキャッシュされているオブジェクトが使用できない場合はデータベース (または他のデータ ソース) にアクセスできる必要があります。

キャッシュ クライアント

キャッシュにデータを格納するには、GetCache メソッドまたは GetDefaultCache メソッドを使用して DataCache オブジェクトを取得します。インスタンス化された後のこの DataCache オブジェクトは、キャッシュ クライアントと呼ばれます。

ヒント

パフォーマンス向上のため、キャッシュが有効なアプリケーションに作成する DataCacheFactory オブジェクトの数は最小限にすることをお勧めします。DataCacheFactory オブジェクトは、キャッシュ クライアントを使用するアプリケーションのすべての部分で使用可能な変数に格納します。

さまざまなオプションを使用してキャッシュ クライアントのビヘイビアーを構成できます。これらの構成設定を指定するには、プログラムか、アプリケーション構成ファイルのどちらか一方、または両方を使用できます。キャッシュ クライアントおよび使用できるアプリケーション構成設定の詳細については、「キャッシュ クライアントとローカル キャッシュ (AppFabric 1.1 キャッシュ)」および「アプリケーション構成設定 (AppFabric 1.1 キャッシュ)」を参照してください。

1 つのキャッシュに複数のキャッシュ クライアントが同時にアクセスできます。このような状況は、異なるコンピューター上で実行するアプリケーションが、同じキャッシュを使用するように構成されているキャッシュ クライアントをインスタンス化することで発生する場合があります。次のコード例はこの概念を示したものです。異なるキャッシュ クライアント インスタンスで実行しているコードをコメントで示してあることに注意してください。

'Each application has a similar GetCache method call
Dim myCacheFactory As DataCacheFactory = New DataCacheFactory()
Dim catalog As DataCache = myCacheFactory.GetCache("catalog")

'One cache client saves an object to the catalog named "toy101"
Call catalog.Put("toy101", New ToyObject("toy101", "Playschool"))

'The same or different cache client retrieves the object
Dim toy As ToyObject = CType(catalog.Get("toy101"), ToyObject)

'The same or a different cache client removes the object
catalog.Remove("toy101")
//Each application has a similar GetCache method call
DataCacheFactory myCacheFactory = new DataCacheFactory();
DataCache catalog = myCacheFactory.GetCache("catalog");

//One cache client saves an object to the catalog named "toy101"
catalog.Put("toy101", new ToyObject("toy101", "Playschool"));

//The same or different cache client retrieves the object
ToyObject toy = (ToyObject)catalog.Get("toy101");

//The same or a different cache client removes the object
catalog.Remove("toy101");

関連項目

概念

AppFabric キャッシュの物理アーキテクチャ図 (AppFabric 1.1 キャッシュ)
AppFabric キャッシュの論理アーキテクチャ図 (AppFabric 1.1 キャッシュ)
キャッシュ クライアントを開発する

  2012-03-05