Agregar datos a la caché
Después de conectarse con éxito al caché y obtener un identificador de caché válido, puede agregar datos al caché. NCache proporciona Add
método y sus sobrecargas para facilitar la adición de objetos a la memoria caché por primera vez.
Prerequisites to Add Data to Cache
- 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 dada en Requisitos previos de la API del lado del cliente.
- Para obtener detalles de la API, consulte: Dolor, Añada, recuadro, Artículo de caché , Versión de elemento de caché, Contar, contiene, Añadir a granel, AgregarAsync.
Agregar objeto a la caché
Note
Esta característica también está disponible en NCache Professional.
Puede agregar un objeto de una clase personalizada al caché usando varias sobrecargas del Add
método.
advertencia
Si la clave ya existe, se generará la excepción "La clave especificada ya existe".
El siguiente ejemplo agrega un objeto de la Producto clase y su clave asociada en el caché. esto vuelve CacheItemVersion
. El ejemplo de código luego verifica si la clave se agregó correctamente a la memoria caché o no.
Consejo
Una forma rápida de verificar si se ha agregado un elemento es usar cualquiera de las siguientes propiedades de la clase Cache:
Count
devuelve el número de elementos presentes en la memoria caché.Contains
verifica si existe una clave específica en el caché.
// 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
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.
Agregar un objeto con vencimiento
Note
Esta característica también está disponible en NCache Professional.
Puede agregar datos con metadatos al caché encapsulándolos en el NCache CacheItem
clase.
El siguiente ejemplo agrega un básico CacheItem
que contiene el Local objeto en el caché. Las propiedades adicionales se establecerán contra el CacheItem
en capítulos sucesivos.
// 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);
}
Agregar elementos masivos a los datos de la caché
Note
Esta característica también está disponible en NCache Professional.
AddBulk
agrega una matriz de CacheItem
al caché con las correspondientes claves de caché. Este método devuelve un diccionario de todas las claves que no se pudieron agregar, junto con el motivo del error.
Note
Para cualquier clave que no se agregue, el motivo del error se devolverá como un IDictionary
.
El siguiente código agrega una gran cantidad de elementos de productos a la memoria caché. Si hay alguna clave que no se pudo agregar, las claves se pueden manejar de acuerdo con las necesidades de su negocio.
// 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}");
}
}
Agregar objetos con API asíncrona
AddAsync
agrega un elemento al caché de forma asíncrona y devuelve un objeto del Clase de tarea que se puede utilizar más de acuerdo con las necesidades comerciales de la aplicación del 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}.");
}
}
Uso de ICache.Add para bloqueo distribuido
Debido a su naturaleza versátil, otro uso amplio de la operación Agregar es bloquear el caché si lo utilizan varias aplicaciones.
Por ejemplo, se configura un entorno tal que tan pronto como una aplicación se conecta al caché, agrega una clave específica que todas las aplicaciones conocen. Y una vez que la aplicación termina de usar el caché, elimina la clave del caché. Si la clave se agrega correctamente, puede proceder a utilizar el caché según su lógica. Sin embargo, si la clave ya existe, significa que una aplicación ya está utilizando el caché y está "bloqueado".
Esto se describe en pasos en el siguiente diagrama:
La aplicación A y la aplicación B agregan la clave "WorkStarted" tan pronto como se inicia la aplicación.
La clave pasada por la aplicación A se agrega al caché antes que la pasada por la aplicación B.
La aplicación B obtiene la excepción "La clave especificada ya existe". En este escenario, la aplicación B esperará a que la aplicación A finalice su trabajo, es decir, hasta que pueda agregar correctamente la clave "WorkStarted".
La aplicación A elimina la clave del caché una vez que ha terminado con su trabajo.
La aplicación B vuelve a agregar la clave al caché.
La aplicación B agrega la clave con éxito, bloqueando el caché para otras aplicaciones.
Recursos adicionales
NCache proporciona la 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.