Ereignisbenachrichtigungen auf Cache-Ebene
Benachrichtigungen auf Cache-Ebene werden ausgelöst, wenn Daten von Clients, Loadern, Backing-Quellen usw. hinzugefügt, aktualisiert oder im Cache entfernt werden. Standardmäßig sind Ereignisse auf Cache-Ebene deaktiviert (mit Ausnahme des Cache-Löschvorgangs) und können über aktiviert werden NCache Management Center.
Cache-Level-Ereignis kann mit registriert werden RegisterCacheNotification
durch Angabe des implementierten Callbacks, EventType
und EventFilter
. Hier beschreiben wir, wie Sie Cache-Level-Ereignisse registrieren und die Registrierung aufheben können.
Note
Die Anwendung kann keine Ereignisse empfangen, es sei denn, sie registriert sich mithilfe des spezifischen API-Aufrufs zur Ereignisregistrierung im Cache.
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.
- Stelle sicher, dass Ereignisbenachrichtigungen aktivieren Verwendung der NCache Managementzentrum.
- Einzelheiten zur API finden Sie unter: ICache, RegisterCacheNotification, Ereignistyp, Ereignisdatenfilter, UnRegisterCacheNotification, CacheEventDescriptor, CacheDataNotificationCallback.
Implementieren Sie Callback für Ereignisbenachrichtigungen
Sie können einen Rückruf für Ereignisse implementieren, wo EventType
wird entsprechend der Logik des Benutzers für angegeben ItemAdded
, ItemUpdated
und ItemRemoved
Veranstaltungen.
Das folgende Beispiel implementiert eine Callback-Methode für Cache-Benachrichtigungen mit bestimmten Ereignistypen.
public void OnCacheDataModification(string key, CacheEventArg args)
{
switch (args.EventType)
{
case EventType.ItemAdded:
Console.WriteLine($"Item with Key '{key}' has been added to cache '{args.CacheName}'");
break;
case EventType.ItemUpdated:
Console.WriteLine($"Item with Key '{key}' has been updated in the cache '{args.CacheName}'");
// Item can be used if EventDataFilter is DataWithMetadata or Metadata
if (args.Item != null)
{
Product updatedProduct = args.Item.GetValue<Product>();
Console.WriteLine($"Updated Item is a Product having name '{updatedProduct.ProductName}', price '{updatedProduct.UnitPrice}', and quantity '{updatedProduct.QuantityPerUnit}'");
}
break;
case EventType.ItemRemoved:
Console.WriteLine($"Item with Key '{key}' has been removed from the cache '{args.CacheName}'");
break;
}
}
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.
Cache-Benachrichtigungen registrieren
Um Benachrichtigungen auf Cache-Ebene zu registrieren, wird eine Zielmethode erstellt, die mehrere Rückrufe haben kann. Die Methode enthält einen Ereignistyp und einen Ereignisfilter. Der EventType
wird entsprechend der Art der Operation angepasst, deren Benachrichtigungen der Benutzer wünscht. Das EventDataFilter
kann einen der drei möglichen Werte haben: None
, MetaData
, oder DataWithMetadata
. Die Ereignisse werden ihren entsprechenden Zuhörern mitgeteilt und wie vom Benutzer implementiert behandelt.
Wichtig
Das EventDataFilter
muss sorgfältig eingestellt werden, um eine unnötige Beanspruchung der Netzwerkbandbreite zu vermeiden.
Das folgende Beispiel erstellt eine Methode, die Rückrufe für Cache-Benachrichtigungen mit bestimmten Ereignistypen registriert.
Note
If EventDataFilter
ist nicht angegeben, EventDataFilter.None
wird automatisch eingestellt.
public void RegisterCacheNotificationsForAllOperations()
{
// create CacheDataNotificationCallback object
var dataNotificationCallback = new CacheDataNotificationCallback(OnCacheDataModification);
// Register cache notification with "ItemAdded" EventType and
// EventDataFilter "None" which means only keys will be returned
CacheEventDescriptor eventDescriptor = cache.MessagingService.RegisterCacheNotification(dataNotificationCallback, EventType.ItemAdded | EventType.ItemUpdated | EventType.ItemRemoved, EventDataFilter.None);
if (eventDescriptor.IsRegistered)
{
Console.WriteLine("Cache level notifications registered successfully");
}
}
Deregistrieren Sie Ereignisse auf Cache-Ebene
Eine zuvor registrierte Cache-Level-Ereignisbenachrichtigung kann auch über die Registrierung aufgehoben werden, wenn sie nicht mehr benötigt wird UnRegisterCacheNotification
Methode. Mit dieser Methode wird die CacheEventDescriptor
Es muss auch angegeben werden, um die Registrierung der Benachrichtigungen aufzuheben. Für Java und Node.js: removeCacheDataModificationListener
wird verwendet, um die Ereignisbenachrichtigungen abzumelden.
Das folgende Beispiel zeigt, wie Sie die Registrierung von Benachrichtigungen mit dieser Methode aufheben.
// Unregister Notifications using the EventDescriptor
cache.MessagingService.UnRegisterCacheNotification(eventDescriptor);
Note
Die Verwendung von Cache-Level-Ereignissen kann sich auf die Leistung Ihrer Anwendung auswirken, da sie Benachrichtigungen für alle angegebenen Vorgänge auslöst, die für den gesamten Cache-Datensatz ausgeführt werden. Ereignisse auf Artikelebene ist der empfohlene Ansatz, um dieses Problem zu vermeiden.
Weitere Informationen
NCache bietet eine Beispielanwendung für Ereignisbenachrichtigungen auf Cache-Ebene an GitHub.
Siehe auch
.NETZ: Alachisoft.NCache.Laufzeitereignisse Namespace.
Java: com.alachisoft.ncache.Veranstaltungen Namespace.
Node.js: EventCacheItem Klasse.
Python: ncache.runtime.caching.events Klasse.