Vorhandene Daten im Cache aktualisieren/einfügen
NCache bietet die Insert
-Methode und ihre Überladungen, um das Aktualisieren von Objekten im Cache zu erleichtern. Während Daten für vorhandene Elemente überschrieben werden, wird das Element auch zum Cache hinzugefügt, wenn der Schlüssel nicht im Cache vorhanden ist.
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, CacheItemVersion, CacheItem, Insert, Erhalten Sie , Bulk einfügen, InsertAsync.
Objekt im Cache aktualisieren
Note
Diese Funktion ist auch in verfügbar NCache Professional.
Sie können ein benutzerdefiniertes Objekt im Cache mithilfe verschiedener Überladungen aktualisieren Insert
Methode. Dies gibt a zurück CacheItemVersion
.
Wichtig
- Wenn der Schlüssel bereits vorhanden ist, wird das vorhandene Cache-Element mit demselben Schlüssel überschrieben.
- Wenn der Schlüssel nicht vorhanden ist, fügt der Vorgang das Element stattdessen dem Cache hinzu.
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.
Das folgende Beispiel ruft die Werte eines vorhandenen Objekts ab und fügt es mit demselben Schlüssel in den Cache ein. Wenn der Schlüssel nicht vorhanden ist, wird er dem Cache hinzugefügt.
// Precondition: Cache is already connected
string customerKey = "ALFKI";
// Get updated product from database against given product ID
Customer customer = FetchProductFromDB("ALFKI");
// Insert Product object to cache
CacheItemVersion version = cache.Insert(customerKey, customer);
// Item updated in cache successfully
Objekt mit Ablaufdatum aktualisieren
Note
Diese Funktion ist auch in verfügbar NCache Professional.
CacheItem
ist eine benutzerdefinierte Klasse, die von bereitgestellt wird NCache Mit dieser Funktion können Sie Daten zum Cache hinzufügen und außerdem zusätzliche Spezifikationen festlegen, die einem Objekt als Eigenschaften dieser Klasse zugeordnet sind. Das CacheItem wird im Cache anhand eines eindeutigen Schlüssels aktualisiert.
Wichtig
- Wenn der Schlüssel bereits vorhanden ist, wird das vorhandene Cache-Element mit demselben Schlüssel überschrieben.
- Wenn der Schlüssel nicht vorhanden ist, fügt der Vorgang das Element stattdessen dem Cache hinzu.
Das folgende Beispiel ruft aktualisierte Werte eines vorhandenen CacheItem ab und fügt es mit demselben Schlüssel in den Cache ein. Wenn der Schlüssel nicht vorhanden ist, wird er dem Cache hinzugefügt.
string customerKey = $"Customer:ALFKI";
Customer customer = FetchCustomerFromDB("ALFKI");
// Update Customer's Phone
customer.Phone = "0921-12 34 65";
// Cretae CacheItem
CacheItem cacheItem = new CacheItem(customer);
cacheItem.Expiration = new Expiration(ExpirationType.Sliding, TimeSpan.FromMinutes(5));
// Update cutsomer in DB and Cache
if (UpdateDB(customer))
{
cache.Insert(customerKey, cacheItem);
}
Massenartikel im Cache aktualisieren
Note
Diese Funktion ist auch in verfügbar NCache Professional.
InsertBulk
aktualisiert ein Array von CacheItem
zum Cache gegen den entsprechenden Schlüssel. Die Methode gibt ein Wörterbuch aller Schlüssel zurück, deren Aktualisierung fehlgeschlagen ist, zusammen mit der Fehlerursache.
Wichtig
Wenn die Aktualisierung eines Schlüssels fehlschlägt, werden die Fehlerursachen als Fehler zurückgegeben IDictionary
.
Das folgende Codebeispiel ruft ein Array von Produkten ab (von Kundenfälle Typ) aus der Datenbank. Die Produkte werden dann als Wörterbuch von Schlüsseln und in den Cache eingefügt CacheItem
Verwendung von InsertBulk
.
// 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, Customer> itemsFetched = cache.GetBulk<Customer>(keys);
//Create a dictionary to store updated items
IDictionary<string, CacheItem> itemsUpdated = new Dictionary<string, CacheItem>();
// Update postal codes of dictionary items
foreach (KeyValuePair<string, Customer> item in itemsFetched)
{
//Update Postal Code
item.Value.PostalCode = "05023";
// Create CacheItem of updated Customer object
CacheItem updatedCacheItem = new CacheItem(item.Value);
// Add uCacheItem to dictionary
itemsUpdated.Add(item.Key,updatedCacheItem);
}
if (UpdateDB(itemsUpdated))
{
// Insert updated bulk items to Cache
IDictionary<string, Exception> keysFailedToInsert = cache.InsertBulk(itemsUpdated);
if (keysFailedToInsert.Count > 0)
{
foreach (KeyValuePair<string, Exception> keyFailedToInsert in keysFailedToInsert)
Console.WriteLine($"Could not update Item {keyFailedToInsert.Key} in cache due to error : {keyFailedToInsert.Value}");
}
}
Aktualisieren Sie Objekte mit der asynchronen API
InsertAsync
gibt das Objekt von zurück Aufgabenklasse die je nach den Geschäftsanforderungen der Clientanwendung weiter verwendet werden können.
string customerKey = $"Customer:ALFKI";
// Get customer from database if not found in cache
if (customer == null)
customer = FetchCustomerFromDB("ALFKI");
// Update customer's Phone
customer.Phone = "12345-6789";
// Update cutsomer in DB and Cache
if (UpdateDB(customer))
{
// Adding item asynchronously.
Task<CacheItemVersion> task = cache.InsertAsync(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 updated with verion {version.Version}.");
}
}
Weitere Informationen
NCache stellt eine Beispielanwendung für Grundoperationen bereit GitHub.
Siehe auch
.NETZ: Alachisoft.NCache.Klient Namespace.
Java: com.alachisoft.ncache.Klient Namespace.
Node.js: Cache-Speicher Klasse.
Python: ncache.Klient Klasse.