キャッシュ通知 (AppFabric 1.1 キャッシュ)
Microsoft AppFabric 1.1 for Windows Server には、キャッシュ クラスターでさまざまなキャッシュ操作が発生したときにアプリケーションが非同期通知を受信できるようにする、キャッシュ通知が用意されています。 キャッシュ通知は、ローカルにキャッシュされたオブジェクトの自動無効化も可能にします。詳細については、「有効期限と削除 (AppFabric 1.1 キャッシュ)」を参照してください。
非同期キャッシュ通知を受信するには、キャッシュ通知コールバックをアプリケーションに追加します。 コールバックを追加するときは、キャッシュ通知をトリガーするキャッシュ操作の種類と、指定された操作が発生したときにアプリケーション内で呼び出す必要のあるメソッドを定義します。 このトピックでは、このプロセスについて詳しく説明します。
ヒント
キャッシュ通知を使用するには、Windows PowerShell ベースのキャッシュ管理ツールから Windows PowerShell の New-Cache
コマンドまたは Set-CacheConfig
コマンドを使用して、名前付きキャッシュに対してキャッシュ通知を有効にする必要があります。
キャッシュ通知のトリガー
次の図に示すとおり、領域およびキャッシュされたオブジェクト (キャッシュ内の項目と呼びます) の両方に対する変更は、キャッシュ通知をトリガーする可能性があります。
このようなキャッシュ操作は、DataCacheOperations クラスのメンバーによって定義されます。
領域の操作
領域について次のキャッシュ操作が発生した場合、アプリケーションはキャッシュ通知を受信する可能性があります。
CreateRegion: キャッシュ内に領域が作成された。
ClearRegion: キャッシュ内で領域がクリアされた。
RemoveRegion: キャッシュから領域が削除された。
項目の操作
キャッシュされたオブジェクト (キャッシュ内の項目と呼びます) について次のキャッシュ操作が発生した場合、アプリケーションはキャッシュ通知を受信する可能性があります。
AddItem: キャッシュに項目が追加された。
ReplaceItem: キャッシュ内で項目が置き換えられた。
RemoveItem: キャッシュから項目が削除された。
ヒント
このような項目の操作自体は、領域の中または外で発生したかどうかは関係ありません。 コールバックの通知スコープを特定の領域に制限することもできます。 これについては、次の「通知スコープ」の項で説明します。
通知スコープ
アプリケーションのアクティビティとニーズによっては、キャッシュ全体に含まれるすべてのオブジェクトおよび領域のイベントに注意を払いたくない場合もあります。 AppFabric では、キャッシュ レベルから領域レベルおよび項目レベルまで、通知のスコープを絞り込むことができます。 次の図に示すとおり、コールバックを追加するときに選択する通知スコープは、どのキャッシュ通知を受信するのかに大きく影響します。
キャッシュ レベルでは、キャッシュ内のすべてのオブジェクトと領域に関するすべてのキャッシュ操作がアプリケーションに通知される可能性があります。 領域レベルでは、1 つの領域およびその領域内のオブジェクトに関するキャッシュ操作だけがアプリケーションに通知されます。 項目レベルでは、1 つのオブジェクトに関するキャッシュ操作だけがアプリケーションに通知されます。
目的の通知スコープを指定するには、キャッシュ通知コールバックを追加する次の 3 つのメソッドのうち、いずれか 1 つを選択します。
AddCacheLevelCallback: すべての領域と項目について発生した領域ベースおよび項目ベースのキャッシュ操作の通知を受けるとき。
AddRegionLevelCallback: 特定の 1 つの領域について発生した領域ベースおよび項目ベースのキャッシュ操作の通知を受けるとき。
AddItemLevelCallback: 特定の 1 つの項目について発生した項目ベースのキャッシュ操作の通知を受けるとき。
通知の順序
キャッシュ クライアントによって受信される通知の順序は、1 つの領域のコンテキスト内で保証されます。 たとえば、RegionA
という名前の領域を作成したとします。 キャッシュ領域に配置されるデータはすべて同一の領域に限定されるので、RegionA
(領域レベルの通知スコープ) に関するすべてのキャッシュ操作は、相互に相対的な順序でキャッシュ クライアントに到達します。 他のキャッシュ ホストで発生した領域ベースおよび項目ベースのキャッシュ操作は、RegionA
内で発生した操作に対して相対的な正しい順序で到達することが保証されません。
パフォーマンスを考慮して、複数の領域が関係する通知の順序、または同じ領域内に格納されない複数のオブジェクトが関係する通知の順序は、保証できません。
項目イベントのバージョン情報は (DataCacheItemVersion オブジェクトの形式)、キャッシュ通知によって呼び出されるメソッドに version
パラメーターと共に渡されます。 この DataCacheItemVersion オブジェクトは、項目イベントをトリガーしたオブジェクトのバージョンに対応します。 CompareTo メソッドを使用することによって、バージョンを比較して、どのキャッシュ操作が先に到達したのかを判断できます。
ヒント
バージョンの比較に意味があるのは、同じキーで指定された同一項目のバージョンを比較するときだけです。 異なるキーのバージョンを比較して順序を推測することはできません。CompareTo メソッドによって結果は返されますが、その結果が有効なのは同じキーのバージョンについてのみです。
ポーリング間隔
キャッシュ通知を使用するとき、アプリケーションは新しい通知があるかどうかを調べるため、一定の間隔でキャッシュ クラスターをチェックします。 この間隔はポーリング間隔と呼ばれ、既定で 300 秒ごとに設定されています。
ポーリング間隔は、アプリケーションの構成設定で秒単位で指定します。 特定の間隔を指定するには、アプリケーション構成ファイル内で clientNotifications
要素の pollInterval
属性を使用します。 DataCacheFactoryConfiguration オブジェクトの NotificationProperties
プロパティを使用して、プログラムで特定のポーリング間隔を指定することもできます。
通知が失われたとき
キャッシュ ホストは一定量のキャッシュ操作しかメモリ内に保持できません。 システム負荷の程度によっては、キャッシュ クライアントが通知を受信する前にキャッシュ ホストのキューで通知が切り捨てられることもあり得ます。 また、クラスター全体が実行を続けているときにあるキャッシュ サーバーで障害が発生したためにデータが失われて、キャッシュ クライアントが通知を受信できなくなる場合もあります。 このような場合、キャッシュ クライアントは失敗通知を使用することによって、一部のキャッシュ通知を受信しなかったことを検出できます。 失敗通知を受信するためのコールバックをアプリケーションに追加するには、AddFailureNotificationCallback メソッドを使用します。 詳細については、「エラー通知コールバックの追加」を参照してください。
キャッシュ クラスターが失われたとき
通知の損失とキャッシュ クラスターの損失との間には重要な違いがあります。 アプリケーションが通知を失った場合は、失敗通知という方法でその損失を検出できます。 キャッシュ クラスター全体が停止、再起動、または損失しても、通知はトリガーされません。 その代わり、キャッシュ クライアントは、クラスターに接続できない場合、次回キャッシュの使用を試みるときに例外をスローします。
ヒント
キャッシュ通知では、クラスター内の領域およびキャッシュ項目に対するデータ関連の変更しか報告されません。クラスター自体のイベントは報告されません。
キャッシュ通知の有効化
キャッシュ通知機能は、クラスターの構成設定において、キャッシュ レベルで構成します。 キャッシュを最初に作成するときに、キャッシュのプロパティとして有効化することができます (New-Cache
コマンドと NotificationsEnabled
スイッチを使用)。 既定では、新しいキャッシュを作成するとき、キャッシュ通知機能は無効になっています。キャッシュ構成設定の編集方法の詳細については、「Windows PowerShell でキャッシュ構成設定を編集する」を参照してください。
キャッシュ通知を受信するためのコールバックを追加するのに、アプリケーションの構成設定は必要ありません。 特定のポーリング間隔を指定するには、アプリケーションの構成設定を使用できます。 既定のポーリング間隔は 300 秒です。 別の間隔を指定するには、XML ベースのアプリケーション構成ファイル内の clientNotification
要素を使用するか、DataCacheFactoryConfiguration オブジェクトの NotificationsProperties
プロパティを使用して、目的の間隔をプログラムで指定します。
キャッシュ通知の使用
キャッシュ通知を有効にした後は、キャッシュ通知の使用に関連する 3 つのタスクがあります。それは、キャッシュ通知コールバックの追加、失敗通知コールバックの追加、およびキャッシュ通知コールバックの削除です。個々のタスクの手順については「キャッシュ通知の使用」で説明しています。
関連項目
概念
AppFabric キャッシュの物理アーキテクチャ図 (AppFabric 1.1 キャッシュ)
AppFabric キャッシュの論理アーキテクチャ図 (AppFabric 1.1 キャッシュ)
キャッシュ クライアントを開発する
2012-03-05