NCache Wie wir inzwischen wissen, speichert Daten im Cache, um die Leistung zu verbessern und eine hohe Leistung und Skalierbarkeit zu erreichen. Wir haben gesehen NCache Wunder wirken, wenn es um den schnellen Zugriff auf Daten für die Leistungssteigerung Ihrer Anwendung geht, aber wir müssen noch lernen, welche Art von Daten es tut NCache im Cache speichern. Wie Datenbanken, NCache ermöglicht das Hinzufügen von Daten durch Befolgen einfacher Schritte. Es ist sehr flexibel, wenn es um das Hinzufügen von Daten geht, und bietet eine Reihe von Datentypen, die den Anforderungen nahezu jeder Art von Anwendung gerecht werden. In diesem Blog dreht sich alles um die Formen, in denen NCache speichert Ihre Daten im Cache-Store und bietet Ihnen so größtmöglichen Komfort.
Schlüssel-Wert-Paare
Für Vorspeisen, NCache ist ein Schlüsselwertspeicher, der dies deutlich zum Ausdruck bringt NCache speichert Daten so, dass es einen Schlüssel für diesen Wert gibt. A Schlüssel ist ein stringbasierter Bezeichner und verfügt über die folgende Liste von Eigenschaften:
- Ein Schlüssel soll eindeutig sein und eine Vervielfältigung des Schlüssels ist nicht zulässig NCache.
- Ein Schlüssel darf nicht null sein.
- Beim Schlüssel muss die Groß-/Kleinschreibung beachtet werden.
A Wert ist der Wert des im Cache gespeicherten Objekts. Wir werden uns später im Blog alle unterstützten Typen ansehen. Dies erklärt das Schlüssel-Wert-Paar, bei dem der Schlüssel als identifizierendes Attribut für den dafür gespeicherten Wert verwendet wird. Abbildung 1 zeigt, wie Daten hinzugefügt und im Cache gespeichert werden:
Unterstützte Datentypen in NCache
NCache unterstützt die Daten in Form von Objekten. Diese Objekte können in einer der folgenden Formen vorliegen:
- Primitive Typen
- Benutzerdefiniertes Klassenobjekt
- Datenstrukturen
- JSON-Daten
Cache-Schlüssel und Datenübersicht Hinzufügen von Daten zum Cache NCache Dynamisches Clustering
Primitive Datentypen
NCache unterstützt alle primitiven .NET-Datentypen. Sie können eine Zeichenfolge als Wert für einen Schlüssel hinzufügen. Im Folgenden sind die von unterstützten Typen aufgeführt NCache:
Byte/Sbyte | kurz/ukurz | Objekt | Schnur | doppelt | bool | Zeitspanne |
int/uint | lang/lang | verkohlen | schweben | dezimal | Terminzeit |
Lassen Sie uns kurz ein kurzes Codebeispiel durchgehen, das das Hinzufügen einer Zeichenfolge zum Schlüssel im Cache zeigt:
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); |
Benutzerdefiniertes Klassenobjekt
Benutzerdefiniertes Klassenobjekt bezieht sich auf ein .NET- oder Java-Klassenobjekt, z. B. Produkte, Bestellungen oder Kunden usw. Die einzige und sehr wichtige Bedingung dafür Fügen Sie ein benutzerdefiniertes Klassenobjekt hinzu zu Ihrem Cache dient dazu, die Daten zu markieren serialisierbar. Sie können die Klasse im Cache folgendermaßen serialisieren:
- Hinzufügen des .NET Serializable-Attributs in Ihrer benutzerdefinierten Klasse oder
- Die richtigen Dynamische kompakte Serialisierung Das ist ein Rahmen, der von bereitgestellt wird NCache Bereitstellung einer kostengünstigen dynamischen Serialisierung für registrierte Klassen.
Es können jedoch keine unserialisierten Daten zum Cache hinzugefügt werden. Schaue auf die Serialisierung Weitere Informationen zur Cache-Datenserialisierung finden Sie im Abschnitt.
Fügen wir im folgenden Code ein benutzerdefiniertes Klassenobjekt zum Cache hinzu. Bevor Sie die Daten zum Cache hinzufügen, markieren Sie sie wie gezeigt serialisiert:
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); |
Datenstrukturen
NCache Die Verteilung in der Natur bietet die Funktionalität von konventionelle Datenstrukturen Dies ermöglicht das Hinzufügen, Entfernen und Abrufen von Daten, ohne die Datenkonsistenz zu beeinträchtigen. Im Folgenden sind die von unterstützten Datenstrukturen aufgeführt NCache:
- Verteilte Liste: Native .NET-Implementierung der IList-Schnittstelle. Auf einer E-Commerce-Plattform können Kunden beispielsweise das Hinzufügen/Entfernen von Artikeln über a erledigen verteilte Liste.
1 |
IDistributedList list = cache.DataTypeManager.CreateList(key, dataTypeAttributes); |
- Verteilte Warteschlange: Die First-In-First-Out-Implementierung (FIFO) für Elemente, bekannt als Distributed Queue. Beispielsweise kann eine von einem Geheimdienst durchgeführte Stimmungsanalyse zum Herausfiltern bedrohlicher Tweets eine verwenden verteilte Warteschlange um die Tweets darin zu speichern.
1 |
IDistributedQueue queue = cache.DataTypeManager.CreateQueue(key); |
- Verteiltes Hashset: Eine ungeordnete Datentypimplementierung, bei der die Werte einer Menge eindeutig und unverwechselbar sind. Wenn Sie beispielsweise einen Online-Buchladen haben, HashSets kann Ihnen dabei helfen, herauszufinden, welcher Benutzer sich für welche Bücher interessiert oder wie viele Bücher gekauft hat.
1 |
IDistributedHashSet userSetMonday = cache.DataTypeManager.CreateHashSet(mondayUsersIds); |
- Verteiltes Wörterbuch: Ein Schlüssel-Wert-Paar, das eine native .NET-Implementierung der IDictionary-Schnittstelle ist. Ein Wert wird für einen bestimmten Schlüssel gespeichert. Sie können beispielsweise Anmeldeinformationen, dh den Benutzernamen und das Kennwort, in Form eines Schlüssels speichern verteiltes Wörterbuch in einer verteilten Cache-Umgebung.
1 |
IDistributedDictionary<string, Product> dictionary = cache.DataTypeManager.CreateDictionary<string, Product>(key); |
- Verteilter Zähler: Eine Datenstruktur, mit der der Wert einfach erhöht oder verringert werden kann. Um beispielsweise die Anzahl der Aufrufe einer Webseite pro Stunde oder pro Tag zu zählen, kann dies ganz einfach mit implementiert werden verteilter Zähler.
1 |
ICounter counter = cache.DataTypeManager.CreateCounter(key, initialValue); |
Schauen Sie sich den folgenden Code an, um eine Vorstellung davon zu bekommen, wie eine verteilte Liste verwendet wird NCache wo eine Liste von Produkten im Cache hinzugefügt wird:
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-Daten in NCache
JSON ist eine leichtgewichtige, lesbare Sprache, die von den Anwendungen verwendet wird, weil sie extrem schnell ist und von allen wichtigen JavaScript-Frameworks unterstützt wird. NCache können Sie Fügen Sie Ihre JSON-Daten hinzu einfach im Cache-Speicher durch die Bereitstellung einiger Klassen, die von einer Basisklasse JsonValueBase abgeleitet sind. Schauen wir uns die von bereitgestellten Kurse an NCache:
- JsonObject: Dieser Klasse steht für ungeordnete Name-Wert-Paare, wobei Name der Name des Objekts und Wert der Wert des JSON-Objekts ist, das einen beliebigen primitiven Typ haben kann.
- JsonValue: Dieser Klasse repräsentiert die primitiven Datentypen in den JSON-Konventionen wie String, Integer oder DateTime.
- JsonArray: Dieser Klasse stellt eine Sammlung von Elementen dar und repräsentiert JArray in NCache's Domäne.
- JsonNull: Diese Klasse repräsentiert den NULL-Wert in den JSON-Standards.
Der folgende Code zeigt die Verwendung von JSON in NCache mit Codebeispiel. Das Codebeispiel zeigt ein JsonObject, das aus einer Zeichenfolge gebildet und in den Cache eingefügt wird.
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-Unterstützung in NCache Verteilte Datenstrukturen Hinzufügen von Daten zum Cache
Standortaffinität
Eine zusätzliche Funktion von NCache zur Bereitstellung einer gesteigerten Leistung ist Standortaffinität. Um eine höhere Leistung und bessere Ergebnisse für Ihre Anwendung zu erzielen, NCache gibt Ihnen die Kontrolle darüber, die Daten zweier verschiedener Klassen auf demselben Knoten zu halten. Dadurch entsteht eine Affinität zwischen verschiedenen Gegenständen, die zu unterschiedlichen Klassen gehören, wodurch die passenden Kosten beim Abrufen dieser Gegenstände gespart werden. Sie müssen lediglich die Elemente mit einer Affinität mit ähnlichen Klammern {} hinzufügen und so sicherstellen, dass die Elemente auf demselben Knoten vorhanden sind. Beispielsweise zeigt „Order_{Product:1001}“ die Affinität zwischen den Bestellungen, die zum Produktobjekt mit dem Produktschlüssel 1001 gehören.
Lassen Sie mich Ihnen ein Codebeispiel zeigen, wo Produkte und Bestellungen werden mithilfe der Standortaffinität auf demselben Knoten hinzugefügt.
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); |
Zusammenfassung
Abschließend NCache Bietet flexible Möglichkeiten zum Hinzufügen von Daten zum Cache, um den Anforderungen Ihrer Anwendung gerecht zu werden. Sie müssen lediglich eine einfache API verwenden, um die Daten zum Cache hinzuzufügen. Das Beste daran NCache ist, dass mit jeder neuen Version das Hinzufügen von Daten durch die Unterstützung neuer Funktionen einfacher und effizienter wird. Sie können sich andere coole Funktionen von ansehen NCache hier.