Wörterbuchverhalten und -verwendung im Cache
Ein Wörterbuch ist eine allgemeine Datenstruktur zum Speichern einer Gruppe von Objekten. Es wird auch Hash, Map und HashMap genannt. Es handelt sich um eine ungeordnete Datenstruktur, die eine Zuordnung von Zeichenfolgenschlüsseln zu den Werten ermöglicht. Beispielsweise kann ein Wörterbuch verwendet werden, um die Informationen aller Produkte in einem Supermarkt gegeneinander zu speichern Produkt ID als Wörterbucheintragsschlüssel.
NCache Verbessert den Wörterbuchdatentyp weiter durch die Bereitstellung NCache-Spezifische Funktionen wie z Groups, Schlüsselwörter, Ablauf, Sperrung, Abhängigkeiten, und mehr dagegen.
Note
In Java entspricht eine Map einem Dictionary in .NET.
Verhalten
- Ein Wörterbuchwert kann ein beliebiger primitiver Typ oder ein benutzerdefiniertes Objekt sein.
- Ein Wörterbuch von
CacheItem
und verschachtelte Wörterbücher werden noch nicht unterstützt. - Wörterbücher werden benannt. Daher müssen Sie für jedes Wörterbuch einen eindeutigen Cache-Schlüssel bereitstellen.
- Ein Wörterbuchschlüssel kann nur vom Typ Zeichenfolge sein.
- Doppelte Wörterbuchschlüssel sind nicht zulässig.
Voraussetzungen:
- Lernen Sie die Standardvoraussetzungen kennen, die für die Arbeit mit allen erforderlich sind NCache Weitere Informationen zu clientseitigen Funktionen finden Sie auf der angegebenen Seite Clientseitige API-Voraussetzungen.
- Einzelheiten zur API finden Sie unter: ICache, IDistributedDictionary, IDataTypeManager, Wörterbuch erstellen, IWörterbuch, GetWörterbuch, ICollectionManager, Registrierungsbenachrichtigung, DataTypeDataNotificationCallback, Ereignistyp, DataTypeEventDataFilter, Zahnscheiben, öffne es.
Erstellen Sie ein Wörterbuch und fügen Sie Daten hinzu
Das folgende Codebeispiel zeigt, wie ein Wörterbuch im Cache anhand des Cacheschlüssels erstellt wird Produktwörterbuch Anschließend werden Daten zum Wörterbuch hinzugefügt.
Tipp
Sie können uns auch Konfigurieren Sie durchsuchbare Attribute wie Gruppen/Tags/Benannte Tags und Invalidierungsattribute wie Ablauf/Eviction/Abhängigkeit beim Erstellen einer Datenstruktur.
// Precondition: Cache must be connected
// Specify unique cache key for dictionary
string key = "ProductDictionary";
// Create dictionary of Product type
IDistributedDictionary<string, Product> dictionary = cache.DataTypeManager.CreateDictionary<string, Product>(key);
// Adding products to dictionary
Product[] products = FetchProducts();
foreach(var product in products)
{
// Add products
string productKey = $"Product:{product.ProductID}";
dictionary.Add(productKey, product);
}
Note
Um sicherzustellen, dass der Vorgang ausfallsicher ist, wird empfohlen, alle potenziellen Ausnahmen in Ihrer Anwendung zu behandeln, wie in erläutert Umgang mit Fehlern.
Wörterbuch aus dem Cache abrufen
Sie können ein Wörterbuch aus dem Cache abrufen, das einen Cache-Schlüssel als Parameter verwendet. Dieser Schlüssel ist der Name des Wörterbuchs, der während der Wörterbucherstellung angegeben wird.
Warnung
Wenn das abgerufene Element nicht vom Wörterbuchtyp ist, a Type mismatch
Ausnahme wird ausgelöst.
// Dictionary with this key already exists in cache
string key = "ProductDictionary";
// Get dictionary and show items of dictionary
IDistributedDictionary<string, Product> retrievedDictionary = cache.DataTypeManager.GetDictionary<string, Product>(key);
if (retrievedDictionary != null)
{
foreach (var item in retrievedDictionary)
{
// Perform operations
}
}
else
{
// Dictionary does not exist
}
Werte bestimmter Wörterbuchschlüssel abrufen
Mit können Sie nur Werte von Wörterbucheinträgen abrufen Get
. Das folgende Codebeispiel verwendet die dictionary
Beispiel aus dem Beispiel für Daten zum Wörterbuch hinzufügen und ruft Werte für die angegebenen Schlüssel ab.
Note
Wenn für den angegebenen Schlüssel kein Wert vorhanden ist, wird null zurückgegeben.
// Dictionary exists in cache
// Create list of keys to fetch corresponding values
var keys = new List<string>();
keys.Add("Product:1001");
keys.Add("Product:1002");
keys.Add("Product:1003");
// Get values against keys
// "dictionary" instance was created while creating dictionary
ICollection<Product> values = dictionary.Get(keys);
foreach (var value in values)
{
// Perform operations
}
Daten in vorhandenes Wörterbuch einfügen
Mit können Sie Daten in ein vorhandenes Wörterbuch einfügen Insert
. Das folgende Codebeispiel ruft neue Produkte aus der Datenquelle ab und fügt sie in ein Wörterbuch ein, das bereits im Cache vorhanden ist.
Note
Wenn die Schlüssel bereits vorhanden sind, werden die Werte im Wörterbuch überschrieben.
// Dictionary with this key already exists in cache
string key = "ProductDictionary";
// Get dictionary to insert more values
IDistributedDictionary<string, Product> retrievedDictionary = cache.DataTypeManager.GetDictionary<string, Product>(key);
// Create dictionary of new products to be added
IDictionary<string, Product> newProducts = new Dictionary<string, Product>();
Product[] products = FetchProducts();
foreach (var product in products)
{
// Add new products
string productKey = $"Product:{product.ProductID}";
newProducts.Add(productKey, product);
}
// Append dictionary entries to existing dictionary
retrievedDictionary.Insert(newProducts);
Elemente aus dem Wörterbuch entfernen
Note
Wenn der zu entfernende Schlüssel nicht vorhanden ist, wird nichts zurückgegeben. Sie können die Anzahl der zurückgegebenen Schlüssel mithilfe des Rückgabetyps überprüfen Remove
.
Elemente können anhand einer bestimmten Sammlung von Schlüsseln aus einem Wörterbuch entfernt werden. Das folgende Codebeispiel entfernt die Wörterbuchentitäten für die abgelaufenen Produkte mit Remove
.
Tipp
Informationen zum Entfernen des gesamten Wörterbuchs aus dem Cache finden Sie unter Datenstrukturen aus dem Cache entfernen
// Dictionary with this key already exists in cache
string key = "ProductDictionary";
// Get dictionary and show items of dictionary
IDistributedDictionary<string, Product> retrievedDictionary = cache.DataTypeManager.GetDictionary<string, Product>(key);
// Create list of keys to remove
List<string> keysToRemove = FetchExpiredProducts();
// Number of keys removed is returned
int itemsRemoved = retrievedDictionary.Remove(keysToRemove);
Ereignisbenachrichtigungen im Wörterbuch
Sie können Cache-Ereignisse, schlüsselbasierte Ereignisse und Datenstrukturereignisse in einer Datenstruktur wie einem Wörterbuch registrieren. Informationen zum Verhalten finden Sie unter merkmalsorientiertes Verhalten.
Das folgende Codebeispiel registriert ein Cache-Ereignis von ItemAdded
und ItemUpdated
sowie eine Veranstaltung für registrieren ItemAdded
und ItemUpdated
auf dem Wörterbuch im Cache. Sobald ein Wörterbuch im Cache erstellt wurde, wird ein ItemAdded
Ein Ereignis auf Cache-Ebene wird ausgelöst. Sobald jedoch ein Element zum Wörterbuch hinzugefügt wird, wird ein ItemAdded
Das Datenstrukturereignis wird ausgelöst und ein ItemUpdated
Das Ereignis auf Cache-Ebene wird ausgelöst.
Ereignis im erstellten Wörterbuch registrieren
// Unique cache key for dictionary
string key = "ProductDictionary";
// Create dictionary of Product type
IDistributedDictionary<string, Product> dictionary = cache.DataTypeManager.CreateDictionary<string, Product>(key);
// Register ItemAdded, ItemUpdated, ItemRemoved events on dictionary created
// DataTypeNotificationCallback is callback method specified
dictionary.RegisterNotification(DataTypeDataNotificationCallback, EventType.ItemAdded |
EventType.ItemUpdated | EventType.ItemRemoved,
DataTypeEventDataFilter.Data);
// Perform operations
Geben Sie einen Rückruf für die Ereignisbenachrichtigung an
private void DataTypeDataNotificationCallback(string collectionName, DataTypeEventArg collectionEventArgs)
{
switch (collectionEventArgs.EventType)
{
case EventType.ItemAdded:
// Item has been added to the collection
break;
case EventType.ItemUpdated:
if (collectionEventArgs.CollectionItem != null)
{
// Item has been updated in the collection
// Perform operations
}
break;
case EventType.ItemRemoved:
// Item has been removed from the collection
break;
}
}
Sperrwörterbuch
Das Wörterbuch kann explizit gesperrt und entsperrt werden, um die Datenkonsistenz sicherzustellen. Das folgende Codebeispiel erstellt ein Wörterbuch und sperrt es für einen Zeitraum von 10 Sekunden mit Zahnscheiben und entsperrt es dann mit öffne es.
// Dictionary exists with key "ProductDictionary"
// Cache Key
string key = "ProductDictionary";
// Get dictionary
IDistributedDictionary<string, Product> dictionary = cache.DataTypeManager.GetDictionary<string, Product>(key);
// Lock dictionary for 10 seconds
bool isLocked = dictionary.Lock(TimeSpan.FromSeconds(10));
if (isLocked)
{
// Dictionary is successfully locked for 10 seconds
// Unless explicitly unlocked
}
else
{
// Dictionary is not locked because either:
// Dictionary is not present in the cache
// Dictionary is already locked
}
dictionary.Unlock();
Weitere Informationen
NCache stellt eine Beispielanwendung für die Wörterbuchdatenstruktur bereit GitHub.
Siehe auch
.NETZ: Alachisoft.NCache.Client.Datentypen Namespace.
Java: com.alachisoft.ncache.client.Datenstrukturen Namespace.
Python: ncache.client.Datenstrukturen Klasse.