• Facebook
  • Twitter
  • Youtube
  • Doublé
  • RSS
  • Docs
  • Comparaisons
  • Blog
  • Télécharger
  • Contactez-Nous
Télécharger
Afficher/masquer la table des matières

Comportement et utilisation du compteur dans le cache

Un compteur est un structure de données à valeur longue unique Les données sont stockées dans le cache. Vous pouvez les incrémenter, les décrémenter, les verrouiller et y enregistrer des événements. Par exemple, un compteur peut servir à enregistrer le nombre de vues d'une vidéo sur un réseau social. Il peut également servir à enregistrer les abonnements à un site web où les utilisateurs peuvent s'abonner ou se désabonner. NCache améliore encore ce compteur en fournissant NCache-des fonctionnalités spécifiques telles que Groupes, Tags, Expiration, Verrouillable, Dépendances, et plus. Par exemple, vous pouvez spécifier un compteur pour le groupe Détails de l'abonnement qui peut contenir des objets clients ainsi que le compteur d'abonnement.

Comportement

  • Null n'est pas un type de valeur pris en charge.
  • Les compteurs sont nommés. Par conséquent, vous devez fournir une clé de cache unique pour un compteur.

Pré-requis :

Avant d'utiliser le NCache Pour les API côté client, assurez-vous que les conditions préalables suivantes sont remplies :

  • .NET
  • Java
  • Node.js
  • Installez les packages NuGet suivants dans votre application cliente .NET :
    • Entreprise: Alachisoft.NCache.SDK
    • Open source: Alachisoft.NCache.Opensource.SDK
  • Incluez les espaces de noms suivants dans votre application :
    • Alachisoft.NCache.Client
    • Alachisoft.NCache.Runtime.Exceptions
    • Alachisoft.NCache.Client.DataTypes
    • Alachisoft.NCache.Client.DataTypes.Collections
    • Alachisoft.NCache.Client.DataTypes.Compteur
    • Alachisoft.NCache.Runtime.Caching
    • Alachisoft.NCache.Runtime.Événements
  • Le cache doit être en cours d'exécution.
  • Assurez-vous que les données ajoutées sont sérialisable.
  • Pour plus de détails sur l'API, reportez-vous à : ICache, Compteur, IDataTypeManager, CréerCompteur, SetValue, Incrément, IncrémentPar, Décrémenter, DécrémenterPar, Obtenir le compteur, ICollectionManager, S'inscrireNotification, DataTypeDataNotificationCallbackDataTypeDataNotificationCallback, Type d'événement, DataTypeEventDataFilterDataTypeEventDataFilter, Verrouillage, Accéder, Gestionnaire de types de données, DataTypeEventArg.
  • Ajoutez les dépendances Maven suivantes pour votre application client Java dans pom.xml fichier:
<dependency>
    <groupId>com.alachisoft.ncache</groupId>
    <!--for NCache Enterprise-->
    <artifactId>ncache-client</artifactId>
    <version>x.x.x</version>
</dependency>
  • Importez les packages suivants dans votre application client Java :
    • importer com.alachisoft.ncache.client.*;
    • importer com.alachisoft.ncache.runtime.exceptions.*;
    • importer com.alachisoft.ncache.client.datastructures.*;
    • importer com.alachisoft.ncache.runtime.events.*;
    • importer com.alachisoft.ncache.runtime.dependencies.*;
  • Le cache doit être en cours d'exécution.
  • Assurez-vous que les données ajoutées sont sérialisable.
  • Pour plus de détails sur l'API, reportez-vous à : Cache, Counter, getDataStructuresManager, créerCompteur, obtenirCompteur, définirValeur, incrément, incrémenter par, décrémenter, décrémentPar, Type d'événement, getEventType, DataStructureDataChangeListenerDataStructureDataChangeListener, onDataStructureChanged, DataStructureEventArgDataStructureEventArg, DataTypeEventDataFilterDataTypeEventDataFilter, obtenirCollectionItem, bloquer, ouvrir, addChangeListener.
  • Installez et incluez le module suivant dans votre application cliente Node.js :

    • Entreprise: client ncache
  • Incluez la classe suivante dans votre application :

    • Cache
    • Gestionnaire de structure de données
  • Le cache doit être en cours d'exécution.
  • Assurez-vous que les données ajoutées sont sérialisable.
  • Pour plus de détails sur l'API, reportez-vous à : Cache, Counter, créerCompteur, décrémenter, décrémentPar, obtenirCompteur, incrément, définirValeur, incrémenter par, addChangeListener, DataStructureDataChangeListenerDataStructureDataChangeListener, Type d'événement, DataTypeEventDataFilterDataTypeEventDataFilter, DataStructureEventArgDataStructureEventArg, getEventType, obtenirCollectionItem.

Créer un compteur

L'exemple de code suivant montre comment créer un compteur dans le cache à l'aide de CreateCounter contre la clé de cache Compteur d'abonnement.

Astuce

Vous pouvez aussi vous configurer les attributs de recherche tels que Groupes/Tags/Tags nommés et attributs d'invalidation tels que l'expiration/l'expulsion/la dépendance lors de la création d'une structure de données.

  • .NET
  • Java
  • Node.js
try
{
  // Precondition: Cache is already connected

  // Specify unique cache key for counter
  string key = "SubscriptionCounter";

  // Set initial value of counter
  long initialValue = 15;

  // Create counter
  ICounter counter = cache.DataTypeManager.CreateCounter(key, initialValue);
}
catch (OperationFailedException ex)
{
    // NCache specific exception
    if(ex.ErrorCode == NCacheErrorCodes.KEY_ALREADY_EXISTS)
    {
        // The specified key already exists in the cache,
        // Either remove the existing object from the cache
        // Or specify another key
    }
    else
    {
        // NCache specific exception
        // Exception can occur due to:
        // Connection Failures
        // Operation Timeout
        // Operation performed during state transfer
    }
}
catch (Exception ex)
{
    // Any generic exception like ArgumentNullException or ArgumentException
}
try
{
  // Precondition: Cache is already connected

  // Specify unique cache key for counter
  String key = "SubscriptionCounter";

  // Set initial value of counter
  long initialValue = 15;

  // Create counter
  Counter counter = cache.getDataStructuresManager().createCounter(key, initialValue);
}
catch (OperationFailedException ex) 
{
    // NCache specific errors
    if (ex.getErrorCode() == NCacheErrorCodes.KEY_ALREADY_EXISTS) {
        // The specified key already exists in cache,
        // Either remove the existing object from cache
        // Or specify another key
    } else {
        // NCache specific exception
        // Exception can occur due to:
        // Connection Failures
        // Operation Timeout
        // Operation performed during state transfer
    }
} 
catch (Exception ex) 
{
    // Any generic exception like IllegalArgumentException or NullPointerException
}
try
{
  // This is an async method
  // Precondition: Cache is already connected

  // Specify unique cache key for counter
  var key = "SubscriptionCounter";

  // Set initial value of counter
  var initialValue = 15;

  // Create counter
  var manager = await this.cache.getDataStructuresManager();
  var counter = await manager.createCounter(key, initialValue);
}
catch (error) {
  // Handle errors
}

Récupérer et mettre à jour la valeur du compteur

Vous pouvez mettre à jour la valeur d'un compteur après sa création. L'exemple de code suivant extrait un compteur du cache à l'aide de GetCounter et définit sa valeur sur une autre valeur, en utilisant SetValue. Il incrémente ensuite sa valeur en utilisant Increment or IncrementBy et décrémente sa valeur en utilisant Decrement or DecrementBy.

  • .NET
  • Java
  • Node.js
// Precondition: Cache is already connected

// Unique key for counter
string key = "SubscriptionCounter";

// Get counter against key
ICounter retrievedCounter = cache.DataTypeManager.GetCounter(key);

// Set value of counter to 100
retrievedCounter.SetValue(100);

// Increment value
long newValue =  retrievedCounter.Increment();

// Decrement value
newValue =  retrievedCounter.Decrement();

// Increment value by 10
newValue =  retrievedCounter.IncrementBy(10);

// Decrement value by 5
newValue =  retrievedCounter.DecrementBy(5);
// Precondition: Cache is already connected

// Unique key for counter
String key = "SubscriptionCounter";

// Get counter against key
Counter retrievedCounter = cache.getDataStructuresManager().getCounter(key);

// Set Value of counter to 100
retrievedCounter.setValue(100);

// Increment value
long newValue =  retrievedCounter.increment();

// Decrement value
newValue =  retrievedCounter.decrement();

// Increment value by 10
newValue =  retrievedCounter.incrementBy(10);

// Decrement value by 5
newValue =  retrievedCounter.decrementBy(5);
// This is an async method
// Precondition: Cache is already connected

// Unique key for counter
var key = "SubscriptionCounter";

// Get counter against key
var manager = await this.cache.getDataStructuresManager();
var retrievedCounter = await manager.getCounter(key);

// Set Value of counter to 100
retrievedCounter.setValue(100);

// Increment value
var newValue =  retrievedCounter.increment();

// Decrement value
newValue =  retrievedCounter.decrement();

// Increment value by 10
newValue =  retrievedCounter.incrementBy(10);

// Decrement value by 5
newValue =  retrievedCounter.decrementBy(5);
Note

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.

Notifications d'événements sur les compteurs

Vous pouvez enregistrer des événements de cache, des événements basés sur des clés et des événements de structure de données sur une structure de données telle qu'un compteur. Pour le comportement, reportez-vous à comportement intelligent.

L'exemple de code suivant enregistre un événement de cache de ItemAdded et ItemUpdated ainsi qu'enregistre un événement pour ItemAdded et ItemUpdated sur le compteur dans le cache. La création d'un compteur déclenche un ItemAdded événement au niveau du cache. Lorsqu'une modification est apportée à la valeur du compteur, un ItemUpdated événement de structure de données et un ItemUpdated Des événements au niveau du cache sont déclenchés.

Enregistrer l'événement sur le compteur créé

  • .NET
  • Java
  • Node.js
// Precondition: Cache is already connected

// Unique cache key for counter
string key = "SubscriptionCounter";

// Set initial value of counter
long initialValue = 15;

// Create counter
ICounter counter = cache.DataTypeManager.CreateCounter(key, initialValue);

// Register ItemAdded, ItemUpdated, ItemRemoved events on counter created
// DataTypeNotificationCallback is callback method specified
counter.RegisterNotification(DataTypeDataNotificationCallback, 
        EventType.ItemAdded,
        DataTypeEventDataFilter.Data);

// Perform operations
// Precondition: Cache is already connected

// Unique cache key for counter
String key = "SubscriptionCounter";

// Set initial value of counter
long initialValue = 15;

// Create counter
Counter counter = cache.getDataStructuresManager().createCounter(key, initialValue);

// Create EnumSet of event type ItemUpdated
// Registration for Add and Remove Event type is not supported for Counters
EnumSet<EventType> enumSet = EnumSet.of(com.alachisoft.ncache.runtime.events.EventType.ItemUpdated);


counter.addChangeListener(dataStructureListener, enumSet, DataTypeEventDataFilter.Data);

// Perform operations
// This is an async method
// Precondition: Cache is already connected

 // Unique cache key for counter
var key = "SubscriptionCounter";

// Set initial value of counter
var initialValue = 15;

// Create counter
var manager = await this.cache.getDataStructuresManager();
var counter = await manager.createCounter(key, initialValue);

// Create EnumSet of event types
var enumSet = [
    ncache.EventType.ItemUpdated,
];

counter.addChangeListener(
this.dataStructureListener, // Make sure this is initialized
enumSet,
ncache.DataTypeEventDataFilter.Data
);
// Perform operations

Spécifier le rappel pour la notification d'événement

  • .NET
  • Java
  • Node.js
private void DataTypeDataNotificationCallback(string collectionName, DataTypeEventArg collectionEventArgs)
{
    if (collectionEventArgs.EventType == EventType.ItemUpdated)
    {
        if (collectionEventArgs.CollectionItem != null)
        {
            // Counter value has been updated
            // Perform operations
        }
    }
}
DataStructureDataChangeListener dataStructureListener = new DataStructureDataChangeListener() {
    @Override
    public void onDataStructureChanged(String collection, DataStructureEventArg dataStructureEventArg) {
        switch (dataStructureEventArg.getEventType()) {
            case ItemUpdated:
                if (dataStructureEventArg.getCollectionItem() != null) {
                    //Item has been updated in the collection
                    // perform operations
                }
            break;

        }
    }
};
// Add and Remove event is not supported for this dataType
onDataStructureChanged(collectionName, eventArg) 
{
  switch (eventArg.getEventType()) 
  {
    case ncache.EventType.ItemUpdated:
      if (eventArg.getCollectionItem() != null) 
      {
        // Item has been updated in the collection
        // Perform operations
      }
      break;
  }
}

Compteur de verrouillage

Les compteurs peuvent être explicitement verrouillés et déverrouillés pour assurer la cohérence des données. L'exemple de code suivant crée un compteur et le verrouille pendant 10 secondes à l'aide de Verrouillage puis le déverrouille en utilisant Accéder.

  • .NET
  • Java
// Precondition: Cache is already connected

// Counter exists with key "SubscriptionCounter"
// Cache Key
string key = "SubscriptionCounter";

// Get counter against key
ICounter counter = cache.DataTypeManager.GetCounter(key);

// Lock counter for 10 seconds
bool isLocked = counter.Lock(TimeSpan.FromSeconds(10));
if (isLocked)
{
    // Counter is successfully locked for 10 seconds
    // Unless explicitly unlocked
}
else
{
    // Counter is not locked because either:
    // Counter is not present in the cache
    // Counter is already locked
}

counter.Unlock();
// Precondition: Cache is already connected

// Counter exists with key "SubscriptionCounter"
// Cache Key
String key = "SubscriptionCounter";

// Get counter against key
Counter counter = cache.getDataStructuresManager().getCounter(key);

// Lock counter for 10 seconds
boolean isLocked = counter.lock(TimeSpan.FromSeconds(10));
if (isLocked) 
{
    // Counter is successfully locked for 10 seconds
    // Unless explicitly unlocked
} else 
{
    // Counter is not locked because either:
    // Counter is not present in the cache
    // Counter is already locked
}
counter.unlock();

Ressources supplémentaires

NCache fournit un exemple d'application pour la structure de données de compteur sur GitHub.

Voir aussi

.RAPPORTER: Alachisoft.NCache.Client.DataTypes espace de noms.
Java: com.alachisoft.ncache.client.datastructures espace de noms.
Node.js : Counter classe.

Contactez-Nous

TÉLÉPHONE

+1 214-619-2601   (Etats-Unis)

+44 20 7993 8327   (RU)

 
EMAIL

sales@alachisoft.com

support@alachisoft.com

NCache
  • Comparaison Des Éditions
  • NCache Architecture
  • Repères
Télécharger
Prix
Essayez le terrain de jeu

Déploiements
  • Cloud (SaaS et logiciels)
  • On-Premises
  • Kubernetes
  • Docker
Cas d'utilisation technique
  • Sessions ASP.NET
  • Sessions ASP.NET Core
  • Messagerie Pub/Sub
  • SignalR ASP.NET en temps réel
  • Internet des Objets (IoT)
  • Base de données NoSQL
  • Traitement de flux
  • Microservices
Ressources
  • Articles de Magazines
  • Articles tiers
  • Articles
  • Vidéos
  • Livres blancs
  • Spectacles
  • Talks
  • Blog
  • Docs
Études de cas clients
  • Témoignages
  • Clients
Assistance
  • Voir la Démo du Produit
  • Forum (Google Groupes)
  • Tips
Entreprise
  • Direction
  • Associés
  • Actualités
  • Événements
  • Carrières
Contactez-Nous

  • AnglaisChinois simplifié)FrançaisAllemandItalienJaponaisCoréenPortugaisEspagnol

  • Contactez-Nous
  •  
  • Plan du site
  •  
  • Conditions d'utilisation
  •  
  • Politique de confidentialité
© Copyright Alachisoft 2002 - . Tous droits réservés. NCache est une marque déposée de Diyatech Corp.
Retour en haut de la page