• 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 de la file d'attente dans le cache

Une file d'attente est une structure de données ordonnée qui utilise le principe du comportement Premier entré, premier sorti (FIFO). NCache La file d'attente distribuée permet d'ajouter et de retirer des éléments de la file d'attente sur plusieurs instances d'application avec une forte cohérence. Elle prend en charge nativement les opérations en masse et les notifications d'événements. NCache améliore encore la structure des données de la file d'attente en fournissant NCache-des fonctionnalités spécifiques telles que Groupes, Tags, Expiration, Verrouillable, Dépendanceset plus encore.

Vous pouvez utiliser des files d'attente dans NCache Pour assurer la continuité du traitement des informations en temps réel, on peut utiliser une file d'attente. Par exemple, les identifiants des candidats à un poste au sein d'une entreprise peuvent être stockés dans une file d'attente. Cette file d'attente fonctionnant selon le principe du premier arrivé, premier servi, le premier candidat à postuler sera convoqué en entretien, et ainsi de suite. De plus, l'entreprise peut définir un groupe pour la file d'attente des personnes ayant postulé à des postes administratifs.

NCache Comportement des files d'attente distribuées

  • Une file d'attente peut être de n'importe quel type primitif ou objet personnalisé.
  • Files d'attente de CacheItem et les files d'attente imbriquées ne sont pas encore prises en charge.
  • Les files d'attente sont nommées. Par conséquent, vous devez fournir une clé de cache unique pour chaque file d'attente.
  • Les valeurs nulles ne sont pas prises en charge.
  • Les valeurs en double sont prises en charge.

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.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, IDistributedQueue, IDataTypeManager, Inclus, CopyTo, VersTableau, Peek, Obtenir la file d'attente, Retirer la file d'attente, En file d'attente, EnqueueBulk, DequeueBulk, Créer une file d'attente, 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, File d'attente distribuée, créer une file d'attente, obtenirQueue, bloquer, ouvrir, Type d'événement, getEventType, addChangeListener, getDataStructuresManager, onDataStructureChanged, DataTypeEventDataFilterDataTypeEventDataFilter, DataStructureDataChangeListenerDataStructureDataChangeListener, DataStructureEventArgDataStructureEventArg, obtenirCollectionItem, copier, coup d'oeil, àArray.
  • 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
    • File d'attente distribuée
  • 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, File d'attente distribuée, getDataStructuresManager, créer une file d'attente, +, obtenirQueue, contient, copier, àArray, coup d'oeil, supprimez, Type d'événement, DataStructureDataChangeListenerDataStructureDataChangeListener, addChangeListener, DataTypeEventDataFilterDataTypeEventDataFilter, DataStructureEventArgDataStructureEventArg, getEventType, obtenirCollectionItem.

Comment créer une file d'attente et y ajouter des données

L'exemple de code suivant montre comment créer une file d'attente de Candidat saisissez dans le cache en fonction de la clé de cache File d'attente des candidats et comment les éléments sont ajoutés à la file d'attente.

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 Queue
  string key = "CandidateQueue";

  // Create Queue of Candidate type
  IDistributedQueue<Candidate> queue = cache.DataTypeManager.CreateQueue<Candidate>(key);

  Candidate[] candidates = FetchCandidates();

  foreach(var candidate in candidates)
  {
      // Add candidates to Queue
      queue.Enqueue(candidate);
  }
}
catch (OperationFailedException ex)
{
    // NCache specific exception
    if(ex.ErrorCode == NCacheErrorCodes.KEY_ALREADY_EXISTS)
    {
        // The specified key already exists in cache,
        // Either remove the existing object from cache
        // Or specify another key
    }
    else if (ex.ErrorCode == NCacheErrorCodes.CACHEITEM_IN_DATA_STRUCTURES)
    {
        // Data structures cannot be of CacheItem type
        // CacheItems cannot be added in data structures
    }
    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 Queue
  String key = "CandidateQueue";

  // Create Queue of Candidate type
  DistributedQueue<Candidate> queue = cache.getDataStructuresManager().createQueue(key, Candidate.class);

  Candidate[] candidates = fetchCandidates();

  for (var candidate : candidates)
  {
      // Add candidates to Queue
      queue.add(candidate);
  }
}
catch (OperationFailedException ex) 
{
    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 if (ex.getErrorCode() == NCacheErrorCodes.CACHEITEM_IN_DATA_STRUCTURES) {
        // Data structures cannot be of CacheItem type
        // CacheItems cannot be added in data structures
    } else {
        // 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 Queue
  var key = "CandidateQueue";

  // Create Queue
  var manager = await this.cache.getDataStructuresManager();
  var queue = await manager.createQueue(key, ncache.JsonDataType.Object);

  var candidates = this.fetchCandidates();
  for (var candidate in candidates) 
  {
  // Add candidates to Queue
  queue.add(candidate);
  }
}
catch (error) {
  // Handle errors
}

Comment créer une file d'attente et y ajouter des données en masse

Si vous souhaitez ajouter plusieurs éléments en un seul appel, vous pouvez utiliser le EnqueueBulk méthode. L'exemple de code suivant montre comment une file d'attente de Candidat type peut être créé dans le cache par rapport à la clé de cache File d'attente des candidats et comment plusieurs éléments peuvent être ajoutés à la file d'attente en masse.

Note

Le EnqueueBulk La méthode garantit que les éléments sont ajoutés dans le même ordre que celui dans lequel ils apparaissent dans la liste fournie.

  • .NET
// Precondition: Cache is already connected

// Specify unique cache key for queue
string key = "CandidateQueue";

// Create Queue of Candidate type
IDistributedQueue<Candidate> queue = cache.DataTypeManager.CreateQueue<Candidate>(key);
Candidate[] candidates = FetchCandidates();

// Add a list of candidates to the queue
queue.EnqueueBulk(candidates);

Si une erreur se produit lors de l'ajout d'un élément pendant le EnqueueBulk L'opération annule l'intégralité du processus. Soit tous les éléments sont mis en file d'attente, soit une exception est levée, sans ajout d'éléments.

Comment récupérer et exécuter d'autres méthodes sur la file d'attente

L'exemple de code suivant récupère une file d'attente à partir du cache à l'aide de GetQueue la méthode puis vérifie si un élément existe dans la file d'attente en utilisant la Contains Cette méthode permet de récupérer un élément du début de la file d'attente sans le supprimer. Peek Cette méthode permet de copier l'intégralité de la file d'attente source vers le tableau cible. CopyTo la méthode, et la convertir en un tableau unidimensionnel en utilisant la ToArray méthode.

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

// Queue with this key already exists in cache
string key = "CandidateQueue";

// Get Queue and show items of Queue
IDistributedQueue<Candidate> retrievedQueue = cache.DataTypeManager.GetQueue<Candidate>(key);

// Get any candidate ID
Candidate candidate = GetCandidateByID(1002);

// Check whether Queue contains the particular candidate or not
if (retrievedQueue.Contains(candidate))
{
    // Candidate exists with this ID
}
// List of candidates for the Queue to be copied into
Candidate[] candidates = new Candidate[retrievedQueue.Count];

// Copy the Queue to another array
retrievedQueue.CopyTo(candidates, 0);

// Copy Queue to one-dimensional array
candidates = retrievedQueue.ToArray();

// Get an item at beginning from Queue without removing
Candidate firstCandidate = retrievedQueue.Peek();
// Precondition: Cache is already connected

// Queue with this key already exists in cache
String key = "CandidateQueue";

// Get Queue and show items of Queue
DistributedQueue<Candidate> retrievedQueue = cache.getDataStructuresManager().getQueue(key, Candidate.class);

// Get any candidate ID
Candidate candidate = getCandidateByID(1002);

// Check whether Queue contains the particular candidate or not
if (retrievedQueue.contains(candidate))
{
    // Candidate exists with this ID
}

// List of candidates for the Queue to be copied into
Candidate[] candidates = new Candidate[retrievedQueue.size()];

// Copy the Queue to another array
retrievedQueue.copyTo(candidates, 0);

// Copy Queue to one-dimensional array
candidates = retrievedQueue.toArray(new Candidate[0]);

// Get an item from the beginning of the queue without removing it
Candidate firstCandidate = retrievedQueue.peek();
// Precondition: Cache is already connected
// This is an async method

// Queue with this key already exists in cache
var key = "CandidateQueue";

// Get Queue and show items of Queue
var manager = await this.cache.getDataStructuresManager();
var retrievedQueue = await manager.getQueue(key, ncache.JsonDataType.Object);

// Get any candidate ID
var candidate = this.getCandidateByID(1002);

// Check whether Queue contains the particular candidate or not
if (retrievedQueue.contains(candidate))
{
// Candidate exists with this ID
}

// List of candidates
var candidates = await retrievedQueue.toArray();

// Get an item from the beginning of the queue without removing it
var firstCandidate = await retrievedQueue.peek();

Comment supprimer des éléments de la file d'attente

Les éléments peuvent être supprimés de la file d'attente de manière FIFO. L'exemple de code suivant supprime le premier candidat de la file d'attente.

Astuce

Pour supprimer toute la file d'attente du cache, reportez-vous à la Supprimer les structures de données du cache .

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

// Queue with this key already exists in cache
string key = "CandidateQueue";
IDistributedQueue<Candidate> retrievedQueue = cache.DataTypeManager.GetQueue<Candidate>(key);

// Remove the first item of the queue
retrievedQueue.Dequeue();
// Precondition: Cache is already connected

// Queue with this key already exists in cache
String key = "CandidateQueue";
DistributedQueue<Candidate> retrievedQueue = cache.getDataStructuresManager().getQueue(key, Candidate.class);

// Remove the first item of the queue
retrievedQueue.remove();
// Precondition: Cache is already connected

// This is an async method
// Queue with this key already exists in cache
var key = "CandidateQueue";
var manager = await this.cache.getDataStructuresManager();
var retrievedQueue = await manager.getQueue(key, ncache.JsonDataType.Object);

// Remove the first item of the queue
await retrievedQueue.remove();
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.

Comment supprimer des données en masse

Si vous souhaitez supprimer plusieurs éléments en un seul appel, vous pouvez utiliser le DequeueBulk méthode. le DequeueBulk la méthode prend un maxItems Paramètre spécifiant le nombre maximal d'éléments à retirer de la file d'attente. Si la file contient moins d'éléments que le nombre spécifié, seuls les éléments disponibles seront retirés. Par exemple, si vous spécifiez 10 éléments, mais qu'il n'en existe que 7, ils seront tous retirés. La valeur par défaut du nombre maximal d'éléments est 7.

L'exemple de code suivant montre comment récupérer la file d'attente de Candidat tapez en utilisant la clé de cache File d'attente des candidats et comment plusieurs éléments peuvent être supprimés de la file d'attente en masse.

Note

Le DequeueBulk La méthode garantit que les éléments sont supprimés de la file d'attente dans le même ordre dans lequel ils ont été ajoutés, jusqu'au nombre spécifié.

Avertissement

Lorsque vous utilisez le DequeueBulk Il est recommandé, pour cette méthode, de ne retirer de la file d'attente que le nombre d'éléments nécessaires au traitement immédiat. Retirer plus d'éléments que nécessaire peut augmenter le temps de traitement, car chaque opération a un coût, surtout si la file d'attente contient une grande quantité de données.

  • .NET
// Precondition: Cache is already connected

// Queue with this key already exists in cache
string key = "CandidateQueue";
IDistributedQueue<Candidate> retrievedQueue = cache.DataTypeManager.GetQueue<Candidate>(key);

// Remove at most the first 10 items in the Queue
IList<Candidate> dequeuedItems = retrievedQueue.DequeueBulk(10);
Note

Si la file d'attente est vide pendant la DequeueBulk opération, une exception sera levée.

Similaire à EnqueueBulk, si une erreur se produit lors de la suppression d'un élément pendant le DequeueBulk L'opération annule l'intégralité du processus. Soit l'utilisateur reçoit tous les éléments demandés, soit une exception est levée, sans aucun élément retourné.

Inscription des notifications d'événements dans les files d'attente

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'une file d'attente. Pour plus de détails, reportez-vous à comportement en termes de fonctionnalités.

Comment inscrire un événement dans la file d'attente créée

Les exemples de code suivants enregistrent les notifications d'événements de structure de données dans la file d'attente. L'exemple .NET enregistre : ItemAdded, ItemUpdated et ItemRemoved Les exemples Java et Node.js enregistrent les événements ItemAdded et ItemRemoved. La création d'une file d'attente déclenche un événement. ItemAdded un événement au niveau du cache, tandis que l'ajout d'un élément à une file d'attente existante déclenche un ItemAdded événement de structure de données et un ItemUpdated Événement au niveau du cache.

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

// Unique cache key for Queue
string key = "CandidateQueue";

// Create Queue of Candidate type
IDistributedQueue<Candidate> queue = cache.DataTypeManager.CreateQueue<Candidate>(key);

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

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

// Unique cache key for the Queue
String key = "CandidateQueue";

// Create Queue of candidate type
DistributedQueue<Candidate> queue = cache.getDataStructuresManager().createQueue(key, Candidate.class);

// Create EnumSet of event types
EnumSet<EventType> enumSet = EnumSet.of(com.alachisoft.ncache.runtime.events.EventType.ItemAdded, EventType.ItemRemoved);

// Register ItemAdded and ItemRemoved events on the created Queue
// dataChangeListener is the specified callback method
queue.addChangeListener(dataStructureListener, enumSet, DataTypeEventDataFilter.Data);

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

// This is an async method
// Unique cache key for the Queue
var key = "CandidateQueue";

// Create Queue of candidate type
var manager = await this.cache.getDataStructuresManager();
var queue = await manager.createQueue(key, ncache.JsonDataType.Object);

// Create EnumSet of event types
// Update EventType is not supported
var enumSet = [
ncache.EventType.ItemAdded,
ncache.EventType.ItemRemoved
];

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

// Perform operations

Comment spécifier une fonction de rappel pour une notification d'événement ?

L'exemple de code suivant montre comment spécifier une méthode de rappel pour recevoir des notifications pour différents événements, par exemple lorsqu'un élément est ajouté, mis à jour ou supprimé d'une collection. En gérant ces événements, vous pouvez déclencher des actions spécifiques en réponse aux modifications apportées au cache.

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

            case ItemRemoved:
                //Item has been removed from the collection
            break;
        }
    }
};
// Update event is not supported for this dataType
onDataStructureChanged(collectionName, eventArg)
{
  switch (eventArg.getEventType())
  {
    case ncache.EventType.ItemAdded:
      // Item has been added to the collection
      break;

    case ncache.EventType.ItemRemoved:
      // Item has been removed from the collection
      break;
  }
}

Comment verrouiller les files d'attente

Les files d'attente peuvent être explicitement verrouillées et déverrouillées pour garantir la cohérence des données. L'exemple de code suivant crée une file d'attente et la verrouille pendant une période de 10 secondes à l'aide de Verrouillage puis le déverrouille en utilisant Accéder.

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

// Queue exists with key "CandidateQueue" cache key
string key = "CandidateQueue";

// Get Queue
IDistributedQueue<Candidate> queue = cache.DataTypeManager.GetQueue<Candidate>(key);

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

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

// Queue exists with key "CandidateQueue" cache key
String key = "CandidateQueue";

// Get Queue
DistributedQueue<Candidate> queue = cache.getDataStructuresManager().getQueue(key, Candidate.class);

// Lock Queue for 10 seconds
boolean isLocked = queue.lock(TimeSpan.FromSeconds(10));

if (isLocked)
{
    // Queue is successfully locked for 10 seconds
    // Unless explicitly unlocked
} else
{
    // Queue is not locked because either:
    // Queue is not present in the cache
    // Queue is already locked
}
queue.unlock();

Ressources supplémentaires

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

Voir aussi

.RAPPORTER: Alachisoft.NCache.Client.DataTypes espace de noms.
Java: com.alachisoft.ncache.client.datastructures espace de noms.
Node.js : File d'attente distribuée 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