キャッシュにデータを追加する
キャッシュに正常に接続し、有効なキャッシュハンドルを取得したら、データをキャッシュに追加できます。 NCache 提供する Add
初めてキャッシュにオブジェクトを追加しやすくするためのメソッドとそのオーバーロード。
データをキャッシュに追加するための前提条件
- すべてを使用するために必要な標準的な前提条件について学習するには NCache クライアント側の機能については、指定されたページを参照してください クライアント側 API の前提条件.
- APIの詳細については、以下を参照してください。 Iキャッシュ, Add, インセット, キャッシュ項目 , キャッシュアイテムのバージョン, ワンランク上の, 含まれています, 一括追加, 非同期の追加.
オブジェクトをキャッシュに追加
Note
この機能は以下でも利用できます NCache Professional.
のさまざまなオーバーロードを使用して、カスタムクラスのオブジェクトをキャッシュに追加できます。 Add
方法。
警告
キーがすでに存在する場合、「指定されたキーはすでに存在します」という例外がスローされます。
次の例では、 プロダクト クラスとそれに関連するキーをキャッシュに入れます。 これは CacheItemVersion
。 次に、コードサンプルは、キーがキャッシュに正常に追加されたかどうかを確認します。
先端
アイテムが追加されたかどうかを確認する簡単な方法のXNUMXつは、Cacheクラスの次のプロパティのいずれかを使用することです。
Count
キャッシュに存在するアイテムの数を返します。Contains
指定されたキーがキャッシュに存在するかどうかを確認します。
// Precondition: Cache is already connected
// Get customer from database
string customerKey = $"Customer:ALFKI";
Customer customer = FetchCustomerFromDB(customerKey);
// Get customer from database if not found in cache
if (customer == null)
{
// Get customer from database
customer = FetchCustomerFromDB("ALFKI");
cache.Add(customerKey, customer);
}
// Item added in cache successfully
Note
操作がフェイルセーフであることを保証するために、で説明されているように、アプリケーション内の潜在的な例外を処理することをお勧めします。 失敗の処理.
有効期限のあるオブジェクトを追加する
Note
この機能は以下でも利用できます NCache Professional.
メタデータを含むデータをキャッシュに追加するには、データを NCache CacheItem
とに提供されます。
次の例では、基本的なものを追加します CacheItem
含みます 顧客 オブジェクトをキャッシュに入れます。 追加のプロパティが設定されます CacheItem
連続した章で。
// Get customer from database if not found in cache
if (customer == null)
{
string customerKey = $"Customer:ALFKI";
Customer customer = FetchCustomerFromDB(customerKey);
// You can use CacheItem object to add metadata along with data to cache
// CacheItem comprises of certain properties such as Expiration which are explained in successive chapters
CacheItem customerCacheItem = new CacheItem(customer);
customerCacheItem.Expiration = new Expiration(ExpirationType.Sliding, TimeSpan.FromMinutes(5));
cache.Add(customerKey, customerCacheItem);
}
一括アイテムをキャッシュ データに追加する
Note
この機能は以下でも利用できます NCache Professional.
AddBulk
の配列を追加します CacheItem
対応するキャッシュキーを使用してキャッシュに移動します。 このメソッドは、追加に失敗したすべてのキーのディクショナリと、失敗の理由を返します。
Note
追加に失敗したキーの場合、失敗の理由は次のように返されます。 IDictionary
.
次のコードは、大量の商品アイテムをキャッシュに追加します。 追加に失敗したキーがある場合は、ビジネスニーズに応じてキーを処理できます。
// Create an array of all Customer Keys
String[] keys = new String[]
{
"Customer:ALFKI", "Customer:ANATR", "Customer:ANTON", "Customer:AROUT", "Customer:BERGS"
};
// Get items from cache
IDictionary<string, CacheItem> itemsFetched = cache.GetCacheItemBulk(keys);
// Fetch items from DB which do not exist in Cache
if (itemsFetched.Count < keys.Length)
{
//Create dictionary of items to be added to cache
IDictionary<string, CacheItem> missingItems = new Dictionary<string, CacheItem>();
foreach (string key in keys)
{
if (!itemsFetched.ContainsKey(key))
{
Customer customer = FetchCustomerFromDB(key);
CacheItem cacheItem = new CacheItem(customer);
missingItems.Add(key, cacheItem);
}
}
// Add bulk items to Cache
IDictionary<string, Exception> keysFailedToAdd = cache.AddBulk(missingItems);
if (keysFailedToAdd.Count > 0)
{
foreach( KeyValuePair<string,Exception> keyFailedToAdd in keysFailedToAdd)
Console.WriteLine($"Could not add Item {keyFailedToAdd.Key} in cache due to error : {keyFailedToAdd.Value}");
}
}
非同期 API を使用してオブジェクトを追加する
AddAsync
アイテムを非同期でキャッシュに追加し、のオブジェクトを返します タスククラス これは、クライアントアプリケーションのビジネスニーズに応じてさらに使用できます。
if (customer == null)
{
string customerKey = $"Customer:ALFKI";
Customer customer = FetchCustomerFromDB(customerKey);
//Adding item asynchronously.You can also add data by creating a CacheItem object which stores meta data as well
Task<CacheItemVersion> task = cache.AddAsync(customerKey, customer);
//This task object can be used as per your business needs
if (task.IsCompleted)
{
// Get CacheItemVersion object from task result
CacheItemVersion version = task.Result;
Console.WriteLine($"Item {customer.CustomerID} has been added to cache with verion {version.Version}.");
}
}
分散ロックのためのICache.Addの使用
その多用途な性質により、追加操作のもう XNUMX つの幅広い用途は、複数のアプリケーションで使用されている場合のキャッシュのロックです。
たとえば、環境は、アプリケーションがキャッシュに接続するとすぐに、すべてのアプリケーションに認識される特定のキーを追加するように設定されます。 そして、アプリケーションがキャッシュの使用を完了すると、キャッシュからキーが削除されます。 キーが正常に追加されると、そのロジックに従ってキャッシュの使用を続行できます。 ただし、キーがすでに存在する場合は、キャッシュがすでにアプリケーションによって使用されており、「ロック」されていることを意味します。
これは、次の図の手順で説明されています。
アプリ A とアプリ B は、アプリケーションが起動されるとすぐに「WorkStarted」キーを追加します。
アプリAによって渡されたキーは、アプリBによって渡されたキーの前にキャッシュに追加されます。
アプリ B は、「指定されたキーはすでに存在します」という例外を受け取ります。 このシナリオでは、アプリ B はアプリ A が作業を完了するまで、つまり「WorkStarted」キーを正常に追加できるまで待機します。
アプリAは、作業が完了すると、キャッシュからキーを削除します。
アプリ B はキーをキャッシュに再度追加します。
アプリ B によってキーが正常に追加され、他のアプリケーションのキャッシュがロックされます。
その他のリソース
NCache 上の基本操作のサンプルアプリケーションを提供します GitHubの.
も参照してください
。ネット: Alachisoft.NCache。クライアント 名前空間
Java: comの。alachisoft.ncache。クライアント 名前空間
Node.js: キャッシュ とに提供されます。
Python: ncache。クライアント とに提供されます。