Mettre à jour/insérer des données existantes dans le cache
NCache Fournit le Insert
et ses surcharges pour faciliter la mise à jour des objets dans le cache. Bien qu'il écrase les données des éléments existants, il ajoute également l'élément au cache si la clé n'existe pas dans le cache.
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.
- Pour plus de détails sur l'API, reportez-vous à : ICache, CacheItemVersionCacheItemVersion, CacheItem, insérer, Obtenez, Insérer en vrac, InsérerAsync.
Mettre à jour l'objet dans le cache
Notes
Cette fonctionnalité est également disponible dans NCache Professional.
Vous pouvez mettre à jour un objet personnalisé dans le cache à l'aide de diverses surcharges du Insert
méthode. Cela renvoie un CacheItemVersion
.
Important
- Si la clé existe déjà, elle écrasera l'élément de cache existant avec la même clé.
- Si la clé n'existe pas, l'opération ajoute l'élément au cache à la place.
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.
L'exemple suivant récupère les valeurs d'un objet existant et l'insère avec la même clé dans le cache. Si la clé n'existe pas, il l'ajoute au cache.
// Precondition: Cache is already connected
string customerKey = "ALFKI";
// Get updated product from database against given product ID
Customer customer = FetchProductFromDB("ALFKI");
// Insert Product object to cache
CacheItemVersion version = cache.Insert(customerKey, customer);
// Item updated in cache successfully
Mettre à jour l'objet avec expiration
Notes
Cette fonctionnalité est également disponible dans NCache Professional.
CacheItem
est une classe personnalisée fournie par NCache qui peut être utilisé pour ajouter des données au cache et vous permet également de définir des spécifications supplémentaires associées à un objet en tant que propriétés de cette classe. Le CacheItem est mis à jour dans le cache par rapport à une clé unique.
Important
- Si la clé existe déjà, elle écrasera l'élément de cache existant avec la même clé.
- Si la clé n'existe pas, l'opération ajoute l'élément au cache à la place.
L'exemple suivant obtient les valeurs mises à jour d'un CacheItem existant et les insère avec la même clé dans le cache. Si la clé n'existe pas, il l'ajoute au cache.
string customerKey = $"Customer:ALFKI";
Customer customer = FetchCustomerFromDB("ALFKI");
// Update Customer's Phone
customer.Phone = "0921-12 34 65";
// Cretae CacheItem
CacheItem cacheItem = new CacheItem(customer);
cacheItem.Expiration = new Expiration(ExpirationType.Sliding, TimeSpan.FromMinutes(5));
// Update cutsomer in DB and Cache
if (UpdateDB(customer))
{
cache.Insert(customerKey, cacheItem);
}
Mettre à jour les éléments en bloc dans le cache
Notes
Cette fonctionnalité est également disponible dans NCache Professional.
InsertBulk
met à jour un tableau de CacheItem
au cache contre la clé correspondante. La méthode renvoie un dictionnaire de toutes les clés dont la mise à jour a échoué, ainsi que la raison de l'échec.
Important
Si la mise à jour d'une clé échoue, les raisons de son échec seront renvoyées sous forme de message. IDictionary
.
L'exemple de code suivant récupère un tableau de produits (de Témoignages type) de la base de données. Les produits sont ensuite insérés dans le cache sous la forme d'un dictionnaire de clés et CacheItem
en utilisant InsertBulk
.
// 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, Customer> itemsFetched = cache.GetBulk<Customer>(keys);
//Create a dictionary to store updated items
IDictionary<string, CacheItem> itemsUpdated = new Dictionary<string, CacheItem>();
// Update postal codes of dictionary items
foreach (KeyValuePair<string, Customer> item in itemsFetched)
{
//Update Postal Code
item.Value.PostalCode = "05023";
// Create CacheItem of updated Customer object
CacheItem updatedCacheItem = new CacheItem(item.Value);
// Add uCacheItem to dictionary
itemsUpdated.Add(item.Key,updatedCacheItem);
}
if (UpdateDB(itemsUpdated))
{
// Insert updated bulk items to Cache
IDictionary<string, Exception> keysFailedToInsert = cache.InsertBulk(itemsUpdated);
if (keysFailedToInsert.Count > 0)
{
foreach (KeyValuePair<string, Exception> keyFailedToInsert in keysFailedToInsert)
Console.WriteLine($"Could not update Item {keyFailedToInsert.Key} in cache due to error : {keyFailedToInsert.Value}");
}
}
Mettre à jour des objets avec une API asynchrone
InsertAsync
renvoie l'objet du Classe de tâche qui peut ensuite être utilisé en fonction des besoins métier de l'application cliente.
string customerKey = $"Customer:ALFKI";
// Get customer from database if not found in cache
if (customer == null)
customer = FetchCustomerFromDB("ALFKI");
// Update customer's Phone
customer.Phone = "12345-6789";
// Update cutsomer in DB and Cache
if (UpdateDB(customer))
{
// Adding item asynchronously.
Task<CacheItemVersion> task = cache.InsertAsync(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 updated with verion {version.Version}.");
}
}
Ressources additionnelles
NCache fournit un 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.