Daten zum Cache hinzufügen
Nachdem Sie erfolgreich eine Verbindung zum Cache hergestellt und ein gültiges Cache-Handle erhalten haben, können Sie Daten zum Cache hinzufügen. NCache bietet die Add
-Methode und ihre Überladungen, um das erstmalige Hinzufügen von Objekten zum Cache zu erleichtern.
Voraussetzungen zum Hinzufügen von Daten zum Cache
- Lernen Sie die Standardvoraussetzungen kennen, die für die Arbeit mit allen erforderlich sind NCache Clientseitige Funktionen finden Sie auf der angegebenen Seite Clientseitige API-Voraussetzungen.
- Einzelheiten zur API finden Sie unter: ICache, Speichern, Insert, CacheItem , CacheItemVersion, Zu Zählen, Enthält, Bulk hinzufügen, AddAsync.
Objekt zum Cache hinzufügen
Note
Diese Funktion ist auch in verfügbar NCache Professional.
Sie können dem Cache mithilfe verschiedener Überladungen ein Objekt einer benutzerdefinierten Klasse hinzufügen Add
Methode.
Warnung
Wenn der Schlüssel bereits vorhanden ist, wird die Ausnahme „Der angegebene Schlüssel existiert bereits“ ausgelöst.
Das folgende Beispiel fügt ein Objekt von hinzu Produkt Klasse und den zugehörigen Schlüssel in den Cache. Das kommt zurück CacheItemVersion
. Anschließend prüft das Codebeispiel, ob der Schlüssel erfolgreich zum Cache hinzugefügt wurde oder nicht.
Tipp
Eine schnelle Möglichkeit, zu überprüfen, ob ein Element hinzugefügt wurde, besteht darin, eine der folgenden Eigenschaften der Cache-Klasse zu verwenden:
Count
gibt die Anzahl der im Cache vorhandenen Elemente zurück.Contains
überprüft, ob ein bestimmter Schlüssel im Cache vorhanden ist.
// 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
Um sicherzustellen, dass der Vorgang ausfallsicher ist, wird empfohlen, alle potenziellen Ausnahmen in Ihrer Anwendung zu behandeln, wie in erläutert Umgang mit Fehlern.
Fügen Sie ein Objekt mit Ablaufdatum hinzu
Note
Diese Funktion ist auch in verfügbar NCache Professional.
Sie können dem Cache Daten mit Metadaten hinzufügen, indem Sie sie im kapseln NCache CacheItem
Klasse.
Im folgenden Beispiel wird ein Basic hinzugefügt CacheItem
enthält die Kundenfälle Objekt in den Cache. Zusätzliche Eigenschaften werden dem gegenübergestellt CacheItem
in aufeinanderfolgenden Kapiteln.
// 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);
}
Fügen Sie Massenelemente zu Cache-Daten hinzu
Note
Diese Funktion ist auch in verfügbar NCache Professional.
AddBulk
fügt ein Array von hinzu CacheItem
zum Cache mit den entsprechenden Cache-Schlüsseln. Diese Methode gibt ein Wörterbuch aller Schlüssel zurück, die nicht hinzugefügt werden konnten, zusammen mit der Fehlerursache.
Note
Für alle Schlüssel, die nicht hinzugefügt werden können, wird der Fehlergrund als zurückgegeben IDictionary
.
Der folgende Code fügt dem Cache eine Menge Produktelemente hinzu. Wenn es Schlüssel gibt, die nicht hinzugefügt werden konnten, können die Schlüssel gemäß Ihren Geschäftsanforderungen gehandhabt werden.
// 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}");
}
}
Objekte mit asynchroner API hinzufügen
AddAsync
Fügt asynchron ein Element zum Cache hinzu und gibt ein Objekt des zurück Aufgabenklasse die entsprechend den Geschäftsanforderungen der Clientanwendung weiter verwendet werden kann.
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}.");
}
}
Verwenden von ICache.Add für verteiltes Sperren
Aufgrund seiner Vielseitigkeit besteht eine weitere häufige Verwendung des Add-Vorgangs darin, den Cache zu sperren, wenn er von mehreren Anwendungen verwendet wird.
Beispielsweise wird eine Umgebung so eingerichtet, dass, sobald eine Anwendung eine Verbindung zum Cache herstellt, sie einen bestimmten Schlüssel hinzufügt, der allen Anwendungen bekannt ist. Und sobald die Anwendung den Cache nicht mehr verwendet, wird der Schlüssel aus dem Cache entfernt. Wenn der Schlüssel erfolgreich hinzugefügt wurde, kann er den Cache gemäß seiner Logik verwenden. Wenn der Schlüssel jedoch bereits vorhanden ist, bedeutet dies, dass der Cache bereits von einer Anwendung verwendet wird und „gesperrt“ ist.
Dies wird im folgenden Diagramm schrittweise beschrieben:
App A und App B fügen den Schlüssel „WorkStarted“ hinzu, sobald die Anwendung gestartet wird.
Der von App A übergebene Schlüssel wird vor dem von App B übergebenen Schlüssel zum Cache hinzugefügt.
App B erhält eine Ausnahme „Der angegebene Schlüssel ist bereits vorhanden“. In diesem Szenario wartet App B darauf, dass App A ihre Arbeit beendet, dh bis sie den Schlüssel „WorkStarted“ erfolgreich hinzufügen kann.
App A entfernt den Schlüssel aus dem Cache, sobald sie mit ihrer Arbeit fertig ist.
App B fügt den Schlüssel erneut zum Cache hinzu.
Der Schlüssel wird von App B erfolgreich hinzugefügt, wodurch der Cache für andere Anwendungen gesperrt wird.
Weitere Informationen
NCache stellt die Beispielanwendung für Basic Operations auf GitHub.
Siehe auch
.NETZ: Alachisoft.NCache.Klient Namespace.
Java: com.alachisoft.ncache.Klient Namespace.
Node.js: Cache-Speicher Klasse.
Python: ncache.Klient Klasse.