Actualizar/Insertar datos existentes en caché
NCache proporciona Insert
método y sus sobrecargas para facilitar la actualización de objetos en el caché. Si bien sobrescribe los datos de los elementos existentes, también agrega el elemento al caché si la clave no existe en el caché.
Requisitos previos
- Para obtener información sobre los requisitos previos estándar necesarios para trabajar con todos NCache características del lado del cliente, consulte la página proporcionada en Requisitos previos de la API del lado del cliente.
- Para obtener detalles de la API, consulte: Dolor, Versión de elemento de caché, Artículo de caché, recuadro, Recibe, Insertar a granel, Insertar asíncrono.
Actualizar objeto en caché
Note
Esta característica también está disponible en NCache Professional.
Puede actualizar un objeto personalizado en el caché usando varias sobrecargas del Insert
método. Esto devuelve un CacheItemVersion
.
Importante:
- Si la clave ya existe, sobrescribirá el elemento de caché existente con la misma clave.
- Si la clave no existe, la operación agrega el elemento a la memoria caché.
Note
Para garantizar que la operación sea a prueba de fallas, se recomienda manejar cualquier posible excepción dentro de su aplicación, como se explica en Manejo de fallas.
El siguiente ejemplo obtiene los valores de un objeto existente y lo inserta con la misma clave en el caché. Si la clave no existe, la agrega al caché.
// 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
Actualizar objeto con vencimiento
Note
Esta característica también está disponible en NCache Professional.
CacheItem
es una clase personalizada proporcionada por NCache que se puede usar para agregar datos al caché y también le permite establecer especificaciones adicionales asociadas con un objeto como propiedades de esta clase. El CacheItem se actualiza en la memoria caché con una clave única.
Importante:
- Si la clave ya existe, sobrescribirá el elemento de caché existente con la misma clave.
- Si la clave no existe, la operación agrega el elemento a la memoria caché.
El siguiente ejemplo obtiene valores actualizados de un CacheItem existente y lo inserta con la misma clave en el caché. Si la clave no existe, la agrega a la memoria caché.
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);
}
Actualizar elementos masivos en caché
Note
Esta característica también está disponible en NCache Professional.
InsertBulk
actualiza una serie de CacheItem
al caché contra la clave correspondiente. El método devuelve un diccionario de todas las claves que no se actualizaron, junto con el motivo del error.
Importante:
Si alguna clave no se actualiza, los motivos del error se devolverán como un IDictionary
.
El siguiente ejemplo de código obtiene una matriz de productos (de Local tipo) de la base de datos. Luego, los productos se insertan en el caché como un diccionario de claves y CacheItem
usando 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}");
}
}
Actualizar objetos con API asíncrona
InsertAsync
devuelve el objeto del Clase de tarea que se puede utilizar de acuerdo con las necesidades comerciales de la aplicación del 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}.");
}
}
Recursos adicionales
NCache proporciona una aplicación de muestra para operaciones básicas en GitHub.
Vea también
.NETO: Alachisoft.NCache.Cliente espacio de nombres
Java: com.alachisoft.ncache.cliente espacio de nombres
Nodo.js: cache clase.
Pitón: ncache.cliente clase.