Ajouter des données au cache
Après vous être connecté avec succès au cache et avoir obtenu un descripteur de cache valide, vous pouvez ajouter des données au cache. NCache Fournit le Add
et ses surcharges pour faciliter l'ajout d'objets au cache pour la première fois.
Conditions préalables pour ajouter des données au cache
- 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.
- Pour plus de détails sur l'API, reportez-vous à : ICache, Ajouter, insérer, CacheItem , CacheItemVersionCacheItemVersion, que vous avez, Inclus, Ajouter en masse, AjouterAsynchrone.
Ajouter un objet au cache
Notes
Cette fonctionnalité est également disponible dans NCache Professional.
Vous pouvez ajouter un objet d'une classe personnalisée au cache en utilisant diverses surcharges du Add
méthode.
Si la clé existe déjà, l'exception "La clé spécifiée existe déjà" sera levée.
L'exemple suivant ajoute un objet du Produit classe et sa clé associée dans le cache. Cela revient CacheItemVersion
. L'exemple de code vérifie ensuite si la clé a été correctement ajoutée au cache ou non.
Conseil
Un moyen rapide de vérifier si un élément a été ajouté consiste à utiliser l'une des propriétés suivantes de la classe Cache :
Count
renvoie le nombre d'éléments présents dans le cache.Contains
vérifie si une clé spécifiée existe dans le cache.
// Precondition: Cache is already connected
// Get customer from database
string customerKey = $"Customer:ALFKI";
Customer customer = FetchCustomerFromDB(customerKey);
// Get customer from database if not found in cache
if (customer == null)
{
// Get customer from database
customer = FetchCustomerFromDB("ALFKI");
cache.Add(customerKey, customer);
}
// Item added in cache successfully
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.
Ajouter un objet avec expiration
Notes
Cette fonctionnalité est également disponible dans NCache Professional.
Vous pouvez ajouter des données avec des métadonnées au cache en les encapsulant dans le NCache CacheItem
classe.
L'exemple suivant ajoute une base CacheItem
contenant Témoignages objet dans le cache. Des propriétés supplémentaires seront définies par rapport au CacheItem
dans les chapitres successifs.
// Get customer from database if not found in cache
if (customer == null)
{
string customerKey = $"Customer:ALFKI";
Customer customer = FetchCustomerFromDB(customerKey);
// You can use CacheItem object to add metadata along with data to cache
// CacheItem comprises of certain properties such as Expiration which are explained in successive chapters
CacheItem customerCacheItem = new CacheItem(customer);
customerCacheItem.Expiration = new Expiration(ExpirationType.Sliding, TimeSpan.FromMinutes(5));
cache.Add(customerKey, customerCacheItem);
}
Ajouter des éléments en masse aux données du cache
Notes
Cette fonctionnalité est également disponible dans NCache Professional.
AddBulk
ajoute un tableau de CacheItem
au cache avec les clés de cache correspondantes. Cette méthode renvoie un dictionnaire de toutes les clés dont l'ajout a échoué, ainsi que la raison de l'échec.
Notes
Pour toutes les clés qui ne parviennent pas à s'ajouter, la raison de l'échec sera renvoyée sous forme de IDictionary
.
Le code suivant ajoute un grand nombre d'éléments de produit au cache. Si certaines clés n'ont pas pu être ajoutées, elles peuvent être gérées en fonction des besoins de votre entreprise.
// Create an array of all Customer Keys
String[] keys = new String[]
{
"Customer:ALFKI", "Customer:ANATR", "Customer:ANTON", "Customer:AROUT", "Customer:BERGS"
};
// Get items from cache
IDictionary<string, CacheItem> itemsFetched = cache.GetCacheItemBulk(keys);
// Fetch items from DB which do not exist in Cache
if (itemsFetched.Count < keys.Length)
{
//Create dictionary of items to be added to cache
IDictionary<string, CacheItem> missingItems = new Dictionary<string, CacheItem>();
foreach (string key in keys)
{
if (!itemsFetched.ContainsKey(key))
{
Customer customer = FetchCustomerFromDB(key);
CacheItem cacheItem = new CacheItem(customer);
missingItems.Add(key, cacheItem);
}
}
// Add bulk items to Cache
IDictionary<string, Exception> keysFailedToAdd = cache.AddBulk(missingItems);
if (keysFailedToAdd.Count > 0)
{
foreach( KeyValuePair<string,Exception> keyFailedToAdd in keysFailedToAdd)
Console.WriteLine($"Could not add Item {keyFailedToAdd.Key} in cache due to error : {keyFailedToAdd.Value}");
}
}
Ajouter des objets avec l'API asynchrone
AddAsync
ajoute un élément au cache de manière asynchrone et renvoie un objet de la Classe de tâche qui peut ensuite être utilisé en fonction des besoins métier de l'application cliente.
if (customer == null)
{
string customerKey = $"Customer:ALFKI";
Customer customer = FetchCustomerFromDB(customerKey);
//Adding item asynchronously.You can also add data by creating a CacheItem object which stores meta data as well
Task<CacheItemVersion> task = cache.AddAsync(customerKey, customer);
//This task object can be used as per your business needs
if (task.IsCompleted)
{
// Get CacheItemVersion object from task result
CacheItemVersion version = task.Result;
Console.WriteLine($"Item {customer.CustomerID} has been added to cache with verion {version.Version}.");
}
}
Utilisation d'ICache.Add pour le verrouillage distribué
En raison de sa nature polyvalente, une autre utilisation répandue de l'opération Ajouter consiste à verrouiller le cache s'il est utilisé par plusieurs applications.
Par exemple, un environnement est défini de telle sorte que dès qu'une application se connecte au cache, elle ajoute une clé spécifique connue de toutes les applications. Et une fois que l’application a fini d’utiliser le cache, elle supprime la clé du cache. Si la clé est ajoutée avec succès, il peut utiliser le cache selon sa logique. Cependant, si la clé existe déjà, cela signifie que le cache est déjà utilisé par une application et est « verrouillé ».
Ceci est décrit par étapes dans le schéma suivant :
L'application A et l'application B ajoutent la clé "WorkStarted" dès le démarrage de l'application.
La clé transmise par App A est ajoutée au cache avant celle transmise par App B.
L'application B obtient une exception « La clé spécifiée existe déjà ». Dans ce scénario, l'application B attendra que l'application A termine son travail, c'est-à-dire jusqu'à ce qu'elle puisse ajouter avec succès la clé « WorkStarted ».
L'application A supprime la clé du cache une fois son travail terminé.
L'application B ajoute à nouveau la clé au cache.
La clé est ajoutée avec succès par l'application B, verrouillant le cache pour d'autres applications.
Ressources additionnelles
NCache fournit l'exemple d'application pour les opérations de base sur GitHub.
Voir aussi
.RAPPORTER: Alachisoft.NCache.Client espace de noms.
Java: com.alachisoft.ncache.client espace de noms.
Node.js : Cache classe.
python: ncache.client classe.