エクスポート (0) 印刷
すべて展開

通知 (Azure キャッシュのロール内キャッシュ)

更新日: 2010年7月

Azure には、キャッシュ クラスターでさまざまなキャッシュ操作が発生したときにアプリケーションが非同期通知を受信できるようにする、キャッシュ通知が用意されています。ローカルにキャッシュされたオブジェクトを自動で無効にすることもできます。

非同期キャッシュ通知を受信するには、キャッシュ通知コールバックをアプリケーションに追加します。コールバックを追加するときは、キャッシュ通知をトリガーするキャッシュ操作の種類と、指定された操作が発生したときにアプリケーション内で呼び出す必要のあるメソッドを定義します。名前付きキャッシュにはオプトインが必要であり、これによってキャッシュ通知が利用できるようになります。

通知はロール内インロール キャッシュ を使用する場合のみサポートされます。通知はShared Cachingではサポートされません。これは、Shared Cachingで通知を使用してローカル キャッシュを無効にできないことを意味します。

このようなキャッシュ操作は、DataCacheOperations クラスのメンバーによって定義されます。

領域について次のキャッシュ操作が発生した場合、アプリケーションはキャッシュ通知を受信する可能性があります。

  • CreateRegion: キャッシュ内に領域が作成された。

  • ClearRegion: キャッシュ内で領域がクリアされた。

  • RemoveRegion: キャッシュから領域が削除された。

キャッシュされたオブジェクト (キャッシュ内の項目と呼びます) について次のキャッシュ操作が発生した場合、アプリケーションはキャッシュ通知を受信する可能性があります。

  • AddItem: キャッシュに項目が追加された。

  • ReplaceItem: キャッシュ内で項目が置き換えられた。

  • RemoveItem: キャッシュから項目が削除された。

noteメモ
このような項目の操作自体は、領域の中または外で発生したかどうかは関係ありません。コールバックの通知スコープを特定の領域に制限することもできます。これについては、次の「通知スコープ」の項で説明します。

アプリケーションのアクティビティとニーズによっては、キャッシュ全体に含まれるすべてのオブジェクトおよび領域のイベントに注意を払いたくない場合もあります。通知のスコープを、キャッシュ レベルから領域レベルおよび項目レベルまで絞り込むことができます。コールバック追加時に選択した通知スコープは、どのキャッシュ通知を受け取るかに大きく影響を及ぼします。

キャッシュ レベルでは、キャッシュ内のすべてのオブジェクトと領域に関するすべてのキャッシュ操作がアプリケーションに通知される可能性があります。領域レベルでは、1 つの領域およびその領域内のオブジェクトに関するキャッシュ操作だけがアプリケーションに通知されます。項目レベルでは、1 つのオブジェクトに関するキャッシュ操作だけがアプリケーションに通知されます。

目的の通知スコープを指定するには、キャッシュ通知コールバックを追加する次の 3 つのメソッドのうち、いずれか 1 つを選択します。

  • AddCacheLevelCallback: すべての領域と項目について発生した領域ベースおよび項目ベースのキャッシュ操作の通知を受けるとき。

  • AddRegionLevelCallback: 特定の 1 つの領域について発生した領域ベースおよび項目ベースのキャッシュ操作の通知を受けるとき。

  • AddItemLevelCallback: 特定の 1 つの項目について発生した項目ベースのキャッシュ操作の通知を受けるとき。

キャッシュ クライアントによって受信される通知の順序は、1 つの領域のコンテキスト内で保証されます。たとえば、RegionA という名前の領域を作成したとします。キャッシュ領域に配置されるデータはすべて同一の領域に限定されるので、RegionA (領域レベルの通知スコープ) に関するすべてのキャッシュ操作は、相互に相対的な順序でキャッシュ クライアントに到達します。他のキャッシュ ホストで発生した領域ベースおよび項目ベースのキャッシュ操作は、RegionA 内で発生した操作に対して相対的な正しい順序で到達することが保証されません。

パフォーマンスを考慮して、複数の領域が関係する通知の順序、または同じ領域内に格納されない複数のオブジェクトが関係する通知の順序は、保証できません。

項目イベントのバージョン情報は (DataCacheItemVersion オブジェクトの形式)、キャッシュ通知によって呼び出されるメソッドに version パラメーターと共に渡されます。この DataCacheItemVersion オブジェクトは、項目イベントをトリガーしたオブジェクトのバージョンに対応します。CompareTo メソッドを使用することによって、バージョンを比較して、どのキャッシュ操作が先に到達したのかを判断できます。

noteメモ
バージョンの比較に意味があるのは、同じキーで指定された同一項目のバージョンを比較するときだけです。異なるキーのバージョンを比較して順序を推測することはできません。CompareTo メソッドによって結果は返されますが、その結果が有効なのは同じキーのバージョンについてのみです。

キャッシュ通知を使用するとき、アプリケーションは新しい通知があるかどうかを調べるため、一定の間隔でキャッシュ クラスターをチェックします。この間隔はポーリング間隔と呼ばれ、既定で 300 秒ごとに設定されています。アプリケーションでの書き込み頻度が高い場合はこの値を小さくしますが、キャッシュの変化がそれほど頻繁でない場合は、間隔を大きくすることをお勧めします。既定値の 300 秒は、ほとんどの一般的なキャッシュに対して良好に機能します。

ポーリング間隔は、アプリケーションの構成設定で秒単位で指定します。特定の間隔を指定するには、アプリケーション構成ファイル内で pollInterval 要素の clientNotifications 属性を使用します。DataCacheFactoryConfiguration オブジェクトの NotificationProperties プロパティを使用して、プログラムで特定のポーリング間隔を指定することもできます。

キャッシュ ホストは一定量のキャッシュ操作しかメモリ内に保持できません。キャッシュ クライアントが通知を受信する前にキャッシュ ホストのキューで通知が切り捨てられることもあり得ます。また、クラスター全体が実行を続けているときにあるキャッシュ サーバーで障害が発生したためにデータが失われて、キャッシュ クライアントが通知を受信できなくなる場合もあります。このような場合、キャッシュ クライアントは失敗通知を使用することによって、一部のキャッシュ通知を受信しなかったことを検出できます。失敗通知を受信するためのコールバックをアプリケーションに追加するには、AddFailureNotificationCallback メソッドを使用します。詳細については、「How to: Add a Failure Notification Callback」を参照してください。

通知の損失とキャッシュ クラスターの損失との間には重要な違いがあります。アプリケーションが通知を失った場合は、失敗通知という方法でその損失を検出できます。キャッシュ クラスター全体が停止、再起動、または損失しても、通知はトリガーされません。その代わり、キャッシュ クライアントは、クラスターに接続できない場合、次回キャッシュの使用を試みるときに例外をスローします。キャッシュ クラスター イベント (キャッシュの作成や削除) は、通知によって報告されることはありません。通知を登録した後でキャッシュがサーバーから削除された場合は、単に通知が送られなくなります。キャッシュが存在していないのと、存在するキャッシュに対して操作が何も実行されていないのを区別するのは不可能です。

noteメモ
キャッシュ通知では、クラスター内の領域およびキャッシュ項目に対するデータ関連の変更しか報告されません。クラスター自体のイベントは報告されません。

キャッシュ通知機能は、クラスターの構成設定において、キャッシュ レベルで構成します。キャッシュのプロパティの 1 つとして、キャッシュを作成した直後に有効化することができます。既定では、新しいキャッシュを作成するとき、キャッシュ通知機能は無効になっています。

キャッシュ通知を受信するためのコールバックを追加するのに、アプリケーションの構成設定は必要ありません。特定のポーリング間隔を指定するには、アプリケーションの構成設定を使用できます。既定のポーリング間隔は 300 秒です。別の間隔を指定するには、XML ベースのアプリケーション構成ファイル内の clientNotification 要素を使用するか、DataCacheFactoryConfiguration オブジェクトの NotificationsProperties プロパティを使用して、目的の間隔をプログラムで指定します。

キャッシュ通知を有効にした後は、キャッシュ通知の使用に関連する 3 つのタスクがあります。それは、キャッシュ通知コールバックの追加、失敗通知コールバックの追加、およびキャッシュ通知コールバックの削除です。これらのタスクそれぞれの手順については、このドキュメントの以降の部分で説明します。

関連項目

表示:
© 2014 Microsoft