NCache これまでにわかっているように、パフォーマンスを向上させ、高いパフォーマンスとスケーラビリティを実現するために、データをキャッシュに保存します。 私たちは見ました NCache アプリケーションのパフォーマンスを向上させるためのデータへの高速アクセスに関しては不思議に思っていますが、それでも、どのような種類のデータが機能するかを学ぶ必要があります。 NCache キャッシュに保存します。 データベースのように、 NCache 簡単な手順でデータを追加でき、データの追加に関しては非常に柔軟性があり、ほぼすべての種類のアプリケーションのニーズに対応する一連のデータ型を提供します。 このブログはすべて、 NCache 最大限の使いやすさを提供することにより、データをキャッシュストアに保存します。
キーと値のペア
初心者のための、 NCache は、次のことを明確に示すKey-Valueストアです。 NCache その値に対するキーがあるようにデータを格納します。 A キー は文字列ベースの識別子であり、次のプロパティのリストがあります。
- キーは一意であると想定されており、によって許可されるキーの重複はありません。 NCache.
- キーをnullにすることはできません。
- キーでは大文字と小文字が区別されます。
A 値 キャッシュに保存されているオブジェクトの値です。 サポートされているすべてのタイプについては、後でブログで説明します。 これは、キーがそれに対して格納された値の識別属性として使用されるキーと値のペアを説明しています。 図1は、データがどのように追加され、キャッシュに格納されるかを示しています。
でサポートされているデータ型 NCache
NCache オブジェクトの形式でデータをサポートします。 これらのオブジェクトは、次のいずれかの形式にすることができます。
- プリミティブタイプ
- カスタムクラスオブジェクト
- データ構造
- JSONデータ
キャッシュキーとデータの概要 キャッシュへのデータの追加 NCache 動的クラスタリング
プリミティブデータ型
NCache すべての.NETプリミティブデータ型をサポートします。 キーに対する値として文字列を追加できます。 でサポートされているタイプは次のとおりです NCache:
バイト/バイト | short / ushort | オブジェクト | 文字列 | ブール | 期間 | |
int / uint | 長い/長い | チャリオット | フロート | 10進数 | 日付時刻 |
キャッシュ内のキーに対する文字列の追加を示す簡単なコード例を簡単に見ていきましょう。
1 2 3 4 5 6 7 8 |
// Specify the customer name as string string customerName = "John Wick"; // Generate a unique cache key string key = "Customer"; // Add the string to cache cache.Add(key, customerName); |
カスタムクラスオブジェクト
カスタムクラスオブジェクトとは、.NETまたはJavaクラスオブジェクトを指します。たとえば、Products、Orders、Customersなどです。 カスタムクラスオブジェクトを追加する キャッシュにデータをマークすることです シリアライズ可能。 次のいずれかの方法で、キャッシュ内のクラスをシリアル化できます。
- カスタムクラスに.NETSerializable属性を追加するか
- 使い方 動的コンパクトシリアル化 それはによって提供されるフレームワークです NCache 登録されたクラスに費用効果の高いシリアル化を動的に提供します。
ただし、シリアル化されていないデータをキャッシュに追加することはできません。 見て 連載 キャッシュデータのシリアル化の詳細については、セクションを参照してください。
以下のコードのキャッシュにカスタムクラスオブジェクトを追加しましょう。 データをキャッシュマークに追加する前に、次のようにシリアル化しました。
1 2 3 4 5 6 7 8 |
[Serializable] public class Product { public int ProductID { get; set; } public string ProductName { get; set; } public string Category { get; set; } public int Price { get; set; } } |
1 2 3 4 5 6 7 8 |
// Get product from database against given product ID Product product = FetchProductFromDB(1001); // Generate a unique cache key for this product string key = $"Product:{product.ProductID}"; // Add Product object to cache CacheItemVersion version = cache.Add(key, product); |
データ構造
NCache 自然に配布されることは、の機能を提供します 従来のデータ構造 これにより、データの一貫性に影響を与えることなく、データの追加、削除、および取得が可能になります。 以下は、によってサポートされているデータ構造です NCache:
- 分散リスト: IListインターフェイスのネイティブ.NET実装。 たとえば、eコマースプラットフォームでは、顧客がアイテムを追加/削除するには、 配布リスト.
1 |
IDistributedList list = cache.DataTypeManager.CreateList(key, dataTypeAttributes); |
- 分散キュー: 分散キューと呼ばれるアイテムの先入れ先出し(FIFO)実装。 たとえば、情報機関が脅迫的なツイートを除外するために行う感情分析では、 分散キュー ツイートを保存します。
1 |
IDistributedQueue queue = cache.DataTypeManager.CreateQueue(key); |
- 分散ハッシュセット: セットの値が一意で独特である、順序付けされていないデータ型の実装。 たとえば、オンラインの本屋がある場合、 ハッシュセット どのユーザーがどの本に興味を持っているか、または何冊の本を購入したかを特定するのに役立ちます。
1 |
IDistributedHashSet userSetMonday = cache.DataTypeManager.CreateHashSet(mondayUsersIds); |
- 分散辞書: IDictionaryインターフェースのネイティブ.NET実装であるキーと値のペア。 値は特定のキーに対して保持されます。たとえば、ログイン資格情報、つまりユーザー名とパスワードを次の形式で保存できます。 分散辞書 分散キャッシュ環境で。
1 |
IDistributedDictionary<string, Product> dictionary = cache.DataTypeManager.CreateDictionary<string, Product>(key); |
- 分散カウンター: 値を簡単にインクリメントまたはデクリメントするために使用されるデータ構造。 たとえば、WebページがXNUMX時間あたりまたはXNUMX日あたりに取得するビューの数を維持するには、次のコマンドを使用して簡単に実装できます。 分散カウンター.
1 |
ICounter counter = cache.DataTypeManager.CreateCounter(key, initialValue); |
以下のコードを見て、で分散リストを使用する方法を理解してください。 NCache 製品のリストがキャッシュに追加されます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
// Specify unique cache key for list string key = "ProductList"; // Create list of Product type in cache IDistributedList list = cache.DataTypeManager .CreateList(key); // Get products to add to list Product[] products = FetchProducts(); foreach (var product in products) { // Add products to list list.Add(product); } |
のJSONデータ NCache
JSONは、アプリケーションで使用される軽量で読み取り可能な言語であり、非常に高速で、すべての主要なJavaScriptフレームワークでサポートされています。 NCache あなたがすることができます JSONデータを追加します 基本クラスJsonValueBaseから派生したいくつかのクラスを提供することにより、キャッシュストアで簡単に実行できます。 によって提供されるクラスを見てみましょう NCache:
- JsonObject: この class は順序付けられていない名前と値のペア用です。ここで、nameはオブジェクトの名前であり、valueは任意のプリミティブ型のJSONオブジェクトの値です。
- JsonValue: この class 文字列、整数、DateTimeなどのJSONの規則でプリミティブデータ型を表します。
- JsonArray: この class アイテムのコレクションを表し、JArrayを表します NCacheのドメイン。
- JsonNull: このクラスは、JSONの標準でNULL値を表します。
以下のコードは、JSONの使用法を示しています NCache コード例付き。 コード例は、文字列から形成され、キャッシュに挿入されたJsonObjectを示しています。
1 2 3 4 5 6 7 8 9 10 11 12 |
var product = GetProductFromDB(); string jsonString = $@"{{ 'ProductID': { product.ProductID}, 'ProductName': '{product.ProductName}', 'Category': '{product.Category}', 'UnitsAvailable' : { product.UnitsAvailable} }}"; JsonObject jsonObject = new JsonObject(jsonString); cache.Insert(key, jsonObject); // Fetch the jsonObject previously added var jsonObject = cache.Get(key); |
でのJSONサポート NCache 分散データ構造 キャッシュへのデータの追加
ロケーションアフィニティ
の追加機能 NCache パフォーマンスを向上させるために ロケーションアフィニティ。 アプリケーションのパフォーマンスと結果を向上させるために、 NCache 1001つの異なるクラスのデータを同じノードに保持するための制御を提供します。 これにより、異なるクラスに属する異なるアイテム間にアフィニティが作成されるため、それらのアイテムをフェッチする際のマッチングコストを節約できます。 必要なのは、類似した中括弧{}との親和性を持つアイテムを追加することです。これにより、アイテムが同じノードに存在するようになります。 たとえば、Order_ {Product:1001}”は、プロダクトオブジェクトに属するオーダーとプロダクトキーXNUMXとの親和性を示します。
ここでのコード例を示しましょう 製品 & 注文 ロケーションアフィニティを使用して同じノードに追加されます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
Product product = FetchProductFromDB(1001); string productKey = "Product:1001"; var productCacheItem = new CacheItem(product); // Add CacheItem to cache CacheItemVersion version = cache.Add(key, productCacheItem); Order order = FetchOrderFromDB(17); // Unique order key for this order using Location Affinity syntax // This will create an affinity for this orderKey with the respective productKey string orderKey = "Order_{Product:1001}"; var orderCacheItem = new CacheItem(order); // Add order with Location Affinity to cache CacheItemVersion version = cache.Add(key, orderCacheItem); |
まとめ
結論として、 NCache アプリケーションの要件に対応するデータをキャッシュに追加する柔軟な方法を提供します。 キャッシュにデータを追加するには、単純なAPIを使用するだけです。 についての最良の部分 NCache つまり、新しいバージョンごとに、新しい機能のサポートにより、データの追加がより簡単かつ効率的になります。 あなたは他のクールな機能をチェックすることができます NCache こちら.