• 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 liste dans le cache

Une liste distribuée est une structure de données ordonnée permettant d'ajouter ou de supprimer des données. Par exemple, les listes gèrent les produits ajoutés au panier d'un site e-commerce. Supposons qu'un utilisateur ajoute des produits comme un parapluie, des pommes vertes et du café à son panier. Avant de finaliser la transaction, le produit « Pommes vertes » est retiré et remplacé par un nouveau produit, « Poires ». Ceci est possible car la liste peut être mise à jour à n'importe quel niveau, sans impact sur les performances.

NCache améliore encore la structure des données de la liste en fournissant NCache-des fonctionnalités spécifiques telles que Groupes, Tags, Expiration, Verrouillable, DépendancesDans ce cas précis, l'entreprise souhaite que la liste du panier ne soit conservée que pendant la durée de la session. Par conséquent, une durée d'expiration, égale à celle de la session, peut être associée à chaque liste créée.

NCache Comportement et limitations de la liste

Depuis que NCache Les listes sont conçues pour une mise à l'échelle dynamique ; les grands ensembles de données peuvent être stockés dans un espace mémoire distribué tout en conservant un accès rapide basé sur l'index.

  • Une liste peut être de n'importe quel type primitif ou objet personnalisé.
  • Une liste de CacheItem et les listes imbriquées ne sont pas encore prises en charge.
  • Les listes sont directement accessibles par index.
  • Les listes sont nommées. Par conséquent, vous devez fournir une clé de cache unique pour chaque liste.
  • 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, IDistributedList, IDataTypeManager, Créer une liste, Ajouter une plage, InsérerEnTête, Obtenir la liste, SupprimerPlage, 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, ListeDistribuée, getDataStructuresManager, créer une liste, ajouterRange, Supprimer la plage, insérerEnTête, obtenirListe, DataStructureDataChangeListenerDataStructureDataChangeListener, onDataStructureChanged, addChangeListener, Type d'événement, getEventType, DataTypeEventDataFilterDataTypeEventDataFilter, DataStructureEventArgDataStructureEventArg, obtenirCollectionItem, bloquer, ouvrir.
  • 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
    • ListeDistribué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, ListeDistribuée, getDataStructuresManager, créer une liste, ajouterRange, obtenirListe, insérerEnTête, supprimez, supprimerRangeCollection, DataStructureDataChangeListenerDataStructureDataChangeListener, Type d'événement, addChangeListener, DataTypeEventDataFilterDataTypeEventDataFilter , DataStructureEventArgDataStructureEventArg, getEventType, obtenirCollectionItem.

Comment créer une liste distribuée et y ajouter des données

CreateList permet aux applications de créer une collection distribuée dédiée qui prend en charge les politiques d'invalidation automatique des données telles que l'expiration ou l'éviction.

L'exemple de code suivant montre comment une liste de Produit les types peuvent être créés dans le cache en utilisant CreateList contre la clé de cache Liste de produits. Les produits sont ajoutés à la liste à l'aide de Add, puis une nouvelle gamme de produits est ajoutée à la liste à l'aide de AddRange.

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 list
  string key = "ProductList";

  // Create list of Product type
  IDistributedList<Product> list = cache.DataTypeManager.CreateList<Product>(key);

  // Get products to add to list
  Product[] products = FetchProducts();

  foreach (var product in products)
  {
      // Add products to list
      list.Add(product);
  }

  // Get new products
  Product[] newProducts = FetchNewProducts();

  // Append list of new Products to existing list
  list.AddRange(newProducts);
}
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
    {
        // 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 list
  String key = "ProductList";

  // Create list of Product type
  DistributedList<Product> list = cache.getDataStructuresManager().createList(key, Product.class);

  // Get products to add to list
  Product[] products = FetchProducts();

  for (var product : products) 
  {
      // Add products to list
      list.add(product);
  }

  // Get new products
  Product[] newProducts = FetchNewProducts();

  // Append list of new Products to existing list
  list.addRange(Arrays.asList(newProducts));
}
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 list
  var key = "ProductList";

  // Create list
  var manager = await this.cache.getDataStructuresManager();
  var list = await manager.createList(key, ncache.JsonDataType.Object);

  // Get products to add to list
  var products = this.fetchProducts();

  for (var product of products) {
  // Add products to list
  list.add(product);
  }

  // Get new products
  var newProducts = this.fetchNewProducts();

  // Append list of new Products to existing list
  list.addRange(newProducts);
}
catch (error) {
  // Handle errors
}
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 mettre à jour les éléments d'une liste distribuée

Vous pouvez mettre à jour les listes et leurs éléments à l'aide d'index, car les listes sont accessibles par leur index. L'exemple de code suivant met à jour une valeur dans une liste existante (créée dans l'exemple précédent) à l'aide de l'index. Il récupère ensuite un article en promotion et l'ajoute au premier élément de la liste. InsertAtHead.

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

// "list" is created in the previous example
// Update value of index with updated product
Product updatedProduct = GetUpdatedProductByID(11);
list[11] = updatedProduct;

// Get product on sale to insert at the head of the list
Product saleProduct = FetchSaleItem();
list.InsertAtHead(saleProduct);
// Precondition: Cache is already connected

// "list" is created in the previous example
// Update value of index with updated product
Product updatedProduct = GetUpdatedProductByID(11);
list.add(11, updatedProduct);

// Get product on sale to insert at the head of the list
Product saleProduct = FetchSaleItem();
list.insertAtHead(saleProduct);
// This is an async method
// Precondition: Cache is already connected

// "list" is created in the previous example
// Update value of index with updated product
var updatedProduct = this.getUpdatedProductByID(11);
list.add(11, updatedProduct);

// Get product on sale to insert at the head of the list
var saleProduct = this.fetchSaleItem();
list.insertAtHead(fetchSaleItem);

Comment récupérer une liste depuis le cache

Vous pouvez récupérer une liste du cache en utilisant GetList, qui prend une clé de cache comme paramètre. Cette clé correspond au nom de la liste spécifiée lors de sa création.

Avertissement

Si l'élément récupéré n'est pas de type Liste, un Type mismatch l'exception est levée.

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

// List with this key already exists in cache
string key = "ProductList";

// Get the list and iterate through its items
IDistributedList<Product> retrievedList = cache.DataTypeManager.GetList<Product>(key);

if (retrievedList != null)
{
    foreach (var item in retrievedList)
    {
        // Perform operations
    }
}
else
{
    // List does not exist
}
// Precondition: Cache is already connected

// List with this key already exists in cache
String key = "ProductList";

// Get the list and iterate through its items
DistributedList<Product> retrievedList = cache.getDataStructuresManager().getList(key, Product.class);

if (retrievedList != null)
{
    for (var item : retrievedList)
    {
        // Perform operations
    }
} else
{
    // List does not exist
}
// This is an async method
// Precondition: Cache is already connected

// List with this key already exists in cache
var key = "ProductList";

// Get the list and iterate through its items
var manager = await this.cache.getDataStructuresManager();
var retrievedList = await manager.getList(key, ncache.JsonDataType.Object);

if (retrievedList != null)
{
for (var item in retrievedList)
{
    // Perform operations
}
} else
{
// List does not exist
}

Comment supprimer des éléments d'une liste

Astuce

Pour supprimer toute la liste du cache, reportez-vous au Supprimer les structures de données du cache .

Des éléments individuels ou une gamme donnée d'éléments peuvent être supprimés d'une liste. L'exemple de code suivant supprime un élément individuel à l'aide de Remove et une gamme de produits périmés utilisant RemoveRange.

Note

Si la clé à supprimer n'existe pas, aucune valeur n'est renvoyée. Vous pouvez vérifier le nombre d'éléments renvoyés à l'aide du type de retour. RemoveRange.

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

// List with this key already exists in cache
string key = "ProductList";

// Get list to remove items
IDistributedList<Product> retrievedList = cache.DataTypeManager.GetList<Product>(key);

// Get a range of out-of-stock products to be removed
List<Product> outOfStockProducts = FetchOutOfStockProducts();

// Remove each item individually from retrievedList
foreach(Product prod in outOfStockProducts)
{
    retrievedList.Remove(prod);
}

// Get range of discontinued products to be removed
List<Product> discontinuedProducts = FetchDiscontinuedProducts();

// Remove this range from retrievedList
// Number of keys removed is returned
int itemsRemoved = retrievedList.RemoveRange(discontinuedProducts);
// Precondition: Cache is already connected

// List with this key already exists in cache
String key = "ProductList";

// Get list to remove items
DistributedList<Product> retrievedList = cache.getDataStructuresManager().getList(key, Product.class);

// Get a range of out-of-stock products to be removed
List<Product> outOfStockProducts = fetchOutOfStockProducts();

// Remove an individual item from retrieved list
for(Product prod : outOfStockProducts)
{
    retrievedList.remove(prod);
}

// Get range of discontinued products to be removed
List<Product> discontinuedProducts = fetchDiscontinuedProducts();

// Remove this range from retrievedList
// Number of keys removed is returned
int itemsRemoved = retrievedList.removeRange(discontinuedProducts);
// This is an async method
// Precondition: Cache is already connected

// List with this key already exists in cache
var key = "ProductList";

// Get list to remove items
var manager = await this.cache.getDataStructuresManager();
var retrievedList = await manager.getList(key, ncache.JsonDataType.Object);

// Get a range of out-of-stock products to be removed
var outOfStockProducts = this.fetchOutOfStockProducts();

// Remove each item individually from retrievedList
for(const prod of outOfStockProducts){
    await retrievedList.remove(prod);
}

// Get range of discontinued products to be removed
var discontinuedProducts = this.fetchDiscontinuedProducts();

// Remove this range from retrievedList
// Number of keys removed is returned
var itemsRemoved = await retrievedList.removeRangeCollection(discontinuedProducts);

Comment enregistrer les notifications d'événements sur les listes

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 liste. Pour le comportement, reportez-vous à comportement en termes de fonctionnalités.

L'exemple de code suivant enregistre ItemAdded, ItemUpdated et ItemRemoved événements de structure de données sur la liste. La création de la liste déclenche un ItemAdded événement au niveau du cache. L'ajout d'un élément à la liste existante déclenche un ItemAdded événement de structure de données et un ItemUpdated Événement au niveau du cache. DataTypeEventDataFilter spécifie la quantité de données renvoyées avec l'événement de structure de données.

Comment inscrire des événements sur une liste créée

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

// Unique cache key for list
string key = "ProductList";

// Create a list of Product type
IDistributedList<Product> list = cache.DataTypeManager.CreateList<Product>(key);

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

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

// Unique cache key for list
String key = "ProductList";

// Create list of product type
DistributedList<Product> list = cache.getDataStructuresManager().createList(key, Product.class);

// Register ItemAdded, ItemUpdated, ItemRemoved events on list created
EnumSet<EventType> enumSet = EnumSet.of(com.alachisoft.ncache.runtime.events.EventType.ItemAdded,
        EventType.ItemUpdated, EventType.ItemRemoved);
list.addChangeListener(dataStructureListener, enumSet, DataTypeEventDataFilter.Data);

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

// Unique cache key for list
var key = "ProductList";

 // Create list
var manager = await this.cache.getDataStructuresManager();
var list = await manager.createList(key, ncache.JsonDataType.Object);


var enumSet = [
    ncache.EventType.ItemAdded,
    ncache.EventType.ItemUpdated,
    ncache.EventType.ItemRemoved
    ];

list.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 ?

  • .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;
    }
}
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 ItemUpdated:
                if (dataStructureEventArg.getCollectionItem() != null) {
                    //Item has been updated in the collection
                    // Perform operations
                }
            break;
            case ItemRemoved:
                //Item has been removed from the collection
            break;
        }
    }
};
onDataStructureChanged(collectionName, eventArg)
{
  switch (eventArg.getEventType())
  {
    case ncache.EventType.ItemAdded:
      // Item has been added to the collection
      break;

    case ncache.EventType.ItemUpdated:
      if (eventArg.getCollectionItem() != null)
      {
        // Item has been updated in the collection
        // Perform operations
      }
      break;

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

Comment implémenter le verrouillage distribué sur une liste

Les listes peuvent être explicitement verrouillées et déverrouillées pour assurer la cohérence des données. L'exemple de code suivant crée une liste et la verrouille pendant 10 secondes à l'aide de Verrouillage, puis le déverrouille à l'aide de Accéder.

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

// List exists with key "ProductList"
string key = "ProductList";

// Get list
IDistributedList<Product> list = cache.DataTypeManager.GetList<Product>(key);

// Lock list for 10 seconds
bool isLocked = list.Lock(TimeSpan.FromSeconds(10));

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

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

// List exists with key "ProductList"
String key = "ProductList";

// Get list
DistributedList<Product> list = cache.getDataStructuresManager().getList(key, Product.class);

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

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

Ressources supplémentaires

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

Voir aussi

.RAPPORTER: Alachisoft.NCache.Client.DataTypes espace de noms.
Java: com.alachisoft.ncache.client.datastructures espace de noms.
Node.js : ListeDistribué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