web-dev-qa-db-ja.com

C#を使用したAppFabricキャッシュの例

現在、AppFabircキャッシングの.net c#アプリケーションへの統合を調査しており、そのようなコード例を探しています。 AppFabricキャッシングから利用できるオープンソースまたはコードサンプルはありますか?

26
amateur

キャッシュ操作
AppFabricキャッシングを処理するときに作成する最初のオブジェクトはDataCacheFactoryです。これは、キャッシュサーバーへの接続方法を工場に伝えるハードコードされた構成データを使用して、または構成なしで作成できます。この場合、web.config/app.configファイルから構成を読み取ります。私の推奨事項は、構成情報を.configファイルに保持することです。それ以外の場合は、キャッシュ設定を変更したい場合は、アプリケーションを再コンパイルして再配布する必要があります。 DataCacheFactoryについて覚えておくべき重要なことは、作成するのが高価であることです-キャッシュ操作ごとにこれらの1つを作成したくはありません。シングルトンパターンの使用を検討してください。詳細は この質問 を参照してください。

// Create a factory reading the config info from the .config file
DataCacheFactory factory = new DataCacheFactory();

キャッシュへの主なインターフェースはCacheオブジェクトを介したものです。キャッシュは、DataCacheFactoryのGetCacheメソッドから取得され、キャッシュの名前を渡します。

DataCache myCache = factory.GetCache("myCache");

キャッシュへのアイテムの追加
キャッシュ内の各アイテムには、文字列であるキーがあります。キーはキャッシュに対して一意である必要があります。すでに存在するキーを渡すと、例外が発生します。キャッシュされるアイテムは、AppFabricがキャッシュ内のサーバーの内部でアイテムを内部的に渡すことができるように、シリアル化可能でなければなりません。最も基本的なレベルでは、Addメソッドを使用してアイテムがキャッシュに追加されます。

object myCachedItem = new Object();
string myCachedItemKey = "MyCacheKey";
myCache.Add(myCachedItemKey, myCachedItem);

キャッシュからアイテムを削除する

myCache.Remove(myCachedItemKey);

シンプル。

キャッシュからアイテムを取得する
キャッシュからアイテムを取得するとき、キャッシュアサイドパターンを使用します。これは、目的のアイテムが存在するかどうかを(キーを使用して)キャッシュで調べることを意味します。アイテムがキャッシュにある場合、キャッシュされたアイテムを取得します(別のタイプにキャストする可能性があります)。それ以外の場合は、アイテムを最初から取得する手順を実行します。データベースから読み込み、次にそれをキャッシュして、次回のためにそこにあるようにします。

object cachedObject;
string myImportantDataKey = "MyImportantDataTable";
DataTable myImportantData;

// This is an object because everything is returned from the cache as an object
cachedObject = myCache.Get(myImportantDataKey);
// Check to see if we got something from the cache
if (cachedObject == null)
{
    // The requested item wasn't in the cache - a cache miss
    // Go get the data from the db
    myImportantData = getMyImportantDataFromMyDatabase();

    // Add the item to the cache so we've got it for next time
    myCache.Add(myImportantDataKey, myImportantData);
}
else
{
    // We have the cached object so cast it to a DataTable
    myImportantData = (DataTable)cachedObject;
}

キャッシュ内のアイテムを更新する

// Put can be used to update an existing item in the cache
// If the item does not exist then it functions like Add
myCache.Put(myImportantDataKey, myUpdatedImportantData);

これが基本的なCRUD操作ですが、同時実行性を処理するために取得できることが他にもたくさんあります。


Windows Server AppFabricトレーニングキットはダウンロードできます ここ 、キャッシュに関するセクションがあります。時間が経つにつれて、人々の問題を解決する多くのコードサンプルが増えると確信しているので、ここでappfabricタグに従ってください。

45
PhilPursglove

また、DataCacheFactoryの各インスタンス化によりAzure AppFabric Cachingサービスへの新しい接続が作成されるため、Azure AppFabric Cachingサービスを使用している場合、シングルトンパターンは非常に重要です。接続数はキャッシュのサイズに基づいて制限されるため(128MBキャッシュには5つの接続が含まれます)、同じファクトリーを再利用しないと、すべての接続を非常にすばやくロックアウトします!

8
Matt Quinn