Notifications d'événements au niveau du cache
Les notifications d'événements au niveau du cache sont déclenchées lorsque des données sont ajoutées, mises à jour ou supprimées dans le cache des clients, du chargeur, de la source de sauvegarde, etc. Par défaut, les événements au niveau du cache sont désactivés (sauf pour l'opération d'effacement du cache) et peuvent être activés via le NCache Centre de gestion.
L'événement de niveau de cache peut être enregistré en utilisant RegisterCacheNotification
en précisant le callback implémenté, EventType
et EventFilter
. Nous décrivons ici comment vous pouvez enregistrer et désenregistrer des événements au niveau du cache.
Notes
L'application ne pourra pas recevoir d'événements à moins qu'elle ne s'enregistre dans le cache à l'aide de l'appel API d'enregistrement d'événement spécifique.
Pré-requis
- Pour en savoir plus sur les prérequis standard requis pour travailler avec tous NCache fonctionnalités côté client, veuillez vous référer à la page donnée sur Prérequis de l'API côté client.
- Assurez-vous de activer les notifications d'événements utilisant l' NCache Centre de gestion.
- Pour plus de détails sur l'API, reportez-vous à : ICache, RegisterCacheNotification, Type d'événement, Filtre de données d'événement, UnRegisterCacheNotification, CacheEventDescriptor, CacheDataNotificationCallback.
Implémenter le rappel pour les notifications d'événements
Vous pouvez implémenter un rappel pour les événements où EventType
est spécifié selon la logique de l'utilisateur pour ItemAdded
, ItemUpdated
et ItemRemoved
événements.
L'exemple suivant implémente une méthode de rappel pour les notifications de cache avec certains types d'événements.
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;
}
}
Notes
Pour garantir la sécurité de l'opération, il est recommandé de gérer toutes les exceptions potentielles au sein de votre application, comme expliqué dans Gestion des échecs.
Enregistrer les notifications de cache
Pour enregistrer les notifications au niveau du cache, une méthode cible est créée qui peut avoir plusieurs rappels. La méthode contient un type d'événement et un filtre d'événement. Le EventType
est ajustée en fonction du type d'opération dont l'utilisateur souhaite les notifications. La EventDataFilter
peut prendre l'une des trois valeurs possibles : None
, MetaData
ou DataWithMetadata
. Les événements seront notifiés à leurs auditeurs appropriés et traités comme mis en œuvre par l'utilisateur.
Important
Les EventDataFilter
doit être réglé avec soin pour éviter une consommation inutile de la bande passante du réseau.
L'exemple suivant crée une méthode qui enregistre les rappels pour les notifications de cache avec certains types d'événements.
Notes
If EventDataFilter
n'est pas spécifié, EventDataFilter.None
est réglé automatiquement.
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");
}
}
Désenregistrer les événements de niveau cache
Une notification d'événement au niveau du cache précédemment enregistrée peut également être désenregistrée si elle n'est plus nécessaire à l'aide de l'option UnRegisterCacheNotification
méthode. En utilisant cette méthode, le CacheEventDescriptor
doit également être spécifié pour désenregistrer les notifications. Pour Java et Node.js, removeCacheDataModificationListener
est utilisé pour désenregistrer les notifications d'événements.
L'exemple suivant montre comment annuler l'enregistrement des notifications à l'aide de cette méthode.
// Unregister Notifications using the EventDescriptor
cache.MessagingService.UnRegisterCacheNotification(eventDescriptor);
Notes
L'utilisation d'événements au niveau du cache peut affecter les performances de votre application, car elle déclenche des notifications pour toutes les opérations spécifiées effectuées sur l'ensemble des données du cache. Événements au niveau de l'objet est l'approche recommandée pour éviter ce problème.
Ressources additionnelles
NCache fournit un exemple d'application pour les notifications d'événements au niveau du cache sur GitHub.
Voir aussi
.RAPPORTER: Alachisoft.NCache.Runtime.Événements espace de noms.
Java: com.alachisoft.ncache.événements espace de noms.
Node.js : EventCacheItem classe.
python: ncache.runtime.caching.events classe.