リードスループロバイダーを構成および実装するには、次の手順に従う必要があります。 NCache.
IReadThruProvider インターフェイスの実装
実装する IReadThruProvider、プロバイダー アセンブリに次の参照を追加します。
Alachisoft.NCache.ランタイム.dll
を実装するクラスを作成する Alachisoft.NCache.Runtime.DatasourceProviders.IReadThruProvider インターフェイスを作成し、それを使用してデプロイします NCache たべる。 NCache キャッシュ内で利用できない場合、フレームワークは内部的にこのクラスを使用して、構成されたデータ ソースからデータをロードします。
IReadThruインターフェイス
パブリックボイド Init(System.Collections。I辞書 パラメーター、 文字列キャッシュID);
パブリックボイド 廃棄();
パブリックボイド LoadFromSource(文字列 キー、 でる ProviderCacheItemcacheItem);
公共 辞書<文字列, ProviderCacheItem> LoadFromSource(文字列[]キー);
メンバー
|
Description
|
その中に
|
このメソッドはによって呼び出されます NCache キャッシュ起動時のフレームワーク。 ユーザーはこのメソッドを使用して、リソースの割り当て、データ ソースの接続の取得などのタスクを実行できます。このメソッドは、プロバイダーに渡される引数の IDictionay インスタンスを入力として受け取ります。 NCache マネージャー (構成設定)。 これにより、パラメーターのリストをプロバイダーに渡すことができます。 これらのパラメータはさまざまな方法で利用できます。 たとえば、データ ソースの接続文字列をパラメーターとして指定できます。 したがって、コードを変更せずにデータ ソース設定を構成しながら、その設定を変更する柔軟な方法が提供されます。
もう XNUMX つの引数 CacheId は、リードスルーが設定されているキャッシュ名を指定します。
|
ソースからロード
|
このメソッドはによって呼び出されます NCache 必要な項目がキャッシュ ストアに見つからない場合はフレームワーク、 NCache 構成されたデータ ソースを通じてロードする必要があります。 このメソッドには、構成されたデータ ソースからオブジェクトをロードするロジックが含まれている必要があります。 第一引数「key」は必須項目のキーを指します。 XNUMX 番目の引数は、Provider CacheItem 型の out パラメータで、必要なプロパティとともにインスタンス化する必要があります。ここでは、ロードされた項目を返す前に、ロードされた項目にさまざまなプロパティを関連付けることができます。 NCache フレームワーク。 このメソッドで割り当てられた Provider CacheItem.Value が「Serializable」であることを確認してください。 NCache 後でそのアイテムをキャッシュ ストアに保存し、将来のリクエストを満たすようにします。
このメソッドを実装するときは、複数の Get リクエストがリードスルーのためにこのメソッドにアクセスする可能性があるため、コード スレッドの安全性に注意する必要があります。 また、再帰的な無限ループを引き起こすシナリオを避けるように注意してください。たとえば、このメソッドでは、同じキャッシュ ハンドルでのリードスルーを伴う Get リクエストにより無限再帰が発生します。
注: の場合 入手, LoadFromSource(文字列キー、ProviderCacheItemcacheItem から出力) その間プロバイダーから呼び出されます GetBulk, LoadFromSource(文字列[]キー)
データソースからアイテムをロードするために呼び出されます。
|
処分
|
このメソッドはによって呼び出されます NCache キャッシュが停止したときのフレームワーク。 このメソッドは、リソースの解放、接続の破棄などのタスクを実行するために使用できます。ここで、データ ソースに関連するリソースを解放して、リソースを効率的に利用できます。
|
|
In NCache, リードスルー プロバイダーはキャッシュ レベルで構成されます。つまり、クラスター化されたキャッシュの場合、すべてのノードにプロバイダー構成とそのデプロイされたアセンブリが含まれます。
|
IReadThruProvider のサンプル コード
// マスター データ ソースからキーによってオブジェクトを読み取るために使用されるメソッドが含まれます。
// マスター データ ソースからキーによってオブジェクトを読み取るために使用されるメソッドが含まれます。
パブリッククラス サンプル読み取りスループロバイダー : IReadThruProvider
{
プライベート SQL接続 _繋がり;
//リソースの割り当てや接続の取得などのタスクを実行します
パブリックボイド 初期化(I辞書 パラメーター、 文字列 キャッシュID)
{
オブジェクト connStringObject = パラメータ[「コンストリング」];
文字列 connString = connStringObject == ヌル ? "" : connStringObject.ToString();
if (connString != "")
_接続 = 新製品 SQL接続(connString);
試します
{
_connection.Open();
}
キャッチ (例外 ex)
{
//例外を処理します
}
}
// 外部データ ソースから項目をロードします。
パブリックボイド LoadFromSource(文字列 キー、 でる ProviderCacheItem cacheItem)
{
// ここで、LoadFromDataSource はデータ ソースからデータをロードするためのダミー メソッドです。
オブジェクト 値 = LoadFromDataSource(キー);
キャッシュアイテム = 新製品 ProviderCacheItem(価値);
cacheItem.ResyncItemOnExpiration = true;
}
// リソースの解放、解放、またはリセットに関連するタスクを実行します。
パブリックボイド 廃棄()
{
if (_connection!= ヌル)
_connection.Close();
}
// 外部データ ソースから大量の項目をロードします。
公共 辞書<文字列, ProviderCacheItem>LoadFromSource(文字列[]キー)
{
試します
{
辞書<文字列, ProviderCacheItem> 辞書 = 新製品 辞書<文字列, ProviderCacheItem>();
文字列 キー = ヌル;
for (int型 インデックス = 0; 索引
{
キー = キー[インデックス];
// ここで、LoadFromDataSource はデータ ソースからデータをロードするためのダミー メソッドです。
Dictionary.Add(キー, 新製品 ProviderCacheItem(LoadFromDataSource(key)));
}
return 辞書;
}
キャッチ (例外 exp)
{
投げる;
}
}
プライベートオブジェクト LoadFromDataSource(文字列 キー)
{
オブジェクト 取得されたオブジェクト = ヌル;
// データソースから項目をロードし、取得したオブジェクトを設定します
return 取得されたオブジェクト;
}
}
このプロバイダーを実装してデプロイした後、直接呼び出しを行うことができます。 NCache 必要なアイテムを入手します。 アイテムがローカルのキャッシュ ストアで利用できない場合、 NCache 指定されたデータ アクセス クラスの「LoadFromSource」メソッドを使用して、データ ソースから項目をロードします.
基本操作でのリードスルーの使用
このセクションでは、読み取りスルー プロバイダーを構成して展開した後の使用方法について説明します。 NCache アプリケーションで複数のリードスルー プロバイダーをサポートします。
アプリケーションに次の名前空間を追加します。
Alachisoft.NCache.Web.キャッシング;
Alachisoft.NCache.Runtime.DatasourceProviders;
Alachisoft.NCache。ランタイム;
NCache は、大阪で Alachisoft.NCacheAPI で読み取りスルー オプションを指定する .Web.Caching.DSReadOption 列挙型。
複数のリードスループロバイダーを設定できます。 NCache。 API を通じて特定のプロバイダー名が指定されていない場合は、デフォルトのリードスルー プロバイダーが呼び出されます。 プロバイダー固有の API オーバーロードを使用して、デフォルト以外のプロバイダーを使用することもできます。
メンバー
|
Description
|
得る(文字列 キー、 DSReadオプション dsReadOption)
|
キャッシュから項目を取得し、デフォルトのプロバイダーを使用します
|
得る(文字列 キー、 文字列 プロバイダー名、 DSReadオプション dsReadOption)
|
キャッシュから項目を取得し、指定されたプロバイダーを使用します
|
プロダクト 製品=ヌル;
試します
{
文字列 キー = 「製品:1001」;
オブジェクト データ = キャッシュ.Get(キー, DSReadオプション.ReadThru);
if (データ!= ヌル)
{
製品 = (プロダクト)データ;
}
}
キャッチ (操作失敗例外 exp)
{
//例外を処理します }
これらの操作のレビューをよりよく理解するために
一括操作。 このシナリオでは、次の API を使用します
メンバー
|
Description
|
I辞書 GetBulk(文字列[]キー、 DSReadオプション dsReadOption)
|
キャッシュから一括アイテムを取得し、デフォルトのプロバイダーを使用します
|
I辞書 GetBulk(文字列[]キー、 文字列 プロバイダー名、 DSReadオプション dsReadOption)
|
キャッシュから一括アイテムを取得し、指定されたプロバイダーを使用します
|
試します
{
文字列[] キー = { 「製品:1001」, 「製品:1002」, 「製品:1003」, 「製品:1004」 };
I辞書 resultSet = キャッシュ.GetBulk(キー, DSReadオプション.ReadThru);
//IDictionary にはキャッシュされたキーと値が含まれています
}
キャッチ (操作失敗例外 exp)
{
//例外を処理します
}
このシナリオでは、次のAPIを使用します。
メンバー
|
Description
|
キャッシュ項目 GetCacheItem(文字列 キー DSReadオプション dsReadOption)
|
キャッシュから CacheItem を取得し、デフォルトのプロバイダーを使用します
|
GetCacheItem(文字列 キー、 文字列 プロバイダー名、 DSReadオプション dsReadOption)
|
キャッシュから CacheItem を取得し、指定されたプロバイダーを使用します
|
文字列 キー = 「製品:1001」;
プロダクト 製品=null;
試します
{
キャッシュ項目 データ = キャッシュ.GetCacheItem(キー, DSReadオプション.ReadThru);
if (データ!= ヌル)
{
製品 = (プロダクト)data.Value;
}
}
キャッチ (例外 exp)
{
//例外を処理します
}
NCManager または config フォルダーにある client.ncconf を通じてデフォルトのプロバイダーを指定できることに注意してください。 NCache インストールディレクトリ。 API と client.ncconf の両方でプロバイダー名が指定されていない場合は、デフォルトのプロバイダーが自動的に使用されます。
<キャッシュ id="マイキャッシュ" デフォルト リードスルー プロバイダー="デフォルトプロバイダ名" クライアントキャッシュ ID="" クライアントキャッシュ同期モード="楽観的" デフォルトのライトスルー プロバイダー="" 負荷平衡="◯" サーバーランタイムコンテキスト="NCACHE">
...
</キャッシュ>
CacheInitParam を使用してプロバイダーを指定することもできます。
NCache アセンブリのロード中に例外が発生した場合は、警告をアプリケーションイベントログに記録します。
も参照してください