Sobre aquellos datos que son de acceso frecuente por varios usuario y además no son modificados muy seguido pueden ser útiles de almacenar en la cache. La primera vez que se acceda en este tipo de página, se guardarán los datos en la cache y las solicitudes siguientes buscarán directamente ahí hasta que la cache expire.
En ASP.NET existen dos tipos diferentes de
almacenamiento en Cache:
·
Caché de aplicaciones: Esta
representa una colección que puede almacenar cualquier objeto en memoria y
automáticamente removerlo en función de las limitaciones de esta, limitaciones
de tiempo u otras dependencias.
·
Caché de resultados de páginas: Esta
permite el almacenamiento de una página, parte de esta o una versión de la
página en la memoria para reducir el tiempo de carga en las próximas
peticiones.
Caché de aplicaciones:
En este
tipo de almacenamiento en cache no es posible almacenar páginas.
El objeto
Cache se encuentra disponible como una propiedad del objeto Page. La clase Cache implementa el almacenamiento en memoria caché con instancias por aplicación.
La duración de la caché se encuentra asociada al de la aplicación. Si la aplicación se reinicia se vuelve a crear el objeto Cache.
Los ítems de la memoria caché se pueden asignar indicando un nombre (key) y un valor (value). Para recuperar estos ítems se deberá evaluar la existencia del nombre indicado (key) y luego asignar el valor a algún objeto. Si el valor buscado es nulo puede que nunca se haya almacenado o que haya expirado de la caché.
Por ejemplo:
Cache[“test”] = “Almaceno esto en cache”;
If (Cache[“test”]!=null)
Label1.Text = (string)Cache[“test”];
Else
Label1.Text = “Se borró”;
La caché permite almacenar cualquier tipo de objeto, incluyendo los tipos de objeto personalizados. Eso si recuerde que al momento de recuperar los valores se deberán convertir al tipo de objeto correcto.
Así como en el ejemplo anterior se almacenó un elemento dentro de la caché asignando un key y value, también es posible realizarlo mediante el método Insert. Este método posee varias sobrecargas que permiten además de agregar los valores anteriores, agregar las dependencias, directivas de expiración, una notificación a la aplicación antes de que se elimine el elemento de la caché y además la prioridad de eliminación del elemento. Vale aclarar que si el elemento a insertar ya existe, el mismo será reemplazado.
Otro método que se puede utilizar para agregar elemento en la caché es el Add, el cual tiene las mismas sobrecargas que el método insert pero en el caso de ejecutarse y un elemento con el mismo nombre ya existe, entonces el método generará un error.
Las sobrecargas de los métodos Insert y Add son las siguientes:
·
Key: (System.String) El nombre del objeto que será
utilizado para acceder a los objetos almacenados en la colección de caché.
·
Value: (System.Object) Son los datos de tipo objeto que
se quieren guardar.
·
Dependencies:
(System.Web.Caching.CacheDependency) Identifica un archivo o un Key con otro elemento de
la memoria caché. En el momento en que el archivo o elemento cacheado cambia, se ejecutará un trigger que dará lugar a que sea removido de la caché.
la memoria caché. En el momento en que el archivo o elemento cacheado cambia, se ejecutará un trigger que dará lugar a que sea removido de la caché.
·
absoluteExpiration: (System.DateTime). Es el tiempo que tiene un
objeto para expirar y ser removido de la caché. Si
se utiliza slidingExpiration, el parámetro absoluteExpiration debe ser NoAbsoluteExpiration. El tiempo de este parámetro no tiene
en cuenta si fue accedido recientemente por un usuario.
·
slidingExpiration: (System.TimeSpan) Es el tiempo que debe transcurrir luego del
último acceso al objeto para que expire y sea borrado de la caché. Si se utiliza una absolutExpiration, el parámetro slidingExpiration
debe ser NoSlidingExpiration.
·
Priority: (System.Web.Caching.CacheItemPriority) Es un
enumerado que se puede utilizar para determinar que objetos se eliminarán
primero cuando la memoria caché empieza a agotarse. Cuanta más baja sea la
prioridad, más pronto se eliminarán. Los valores de prioridad son los
siguientes:
§
Low
§
BelowNormal
§
Normal (por defecto)
§
AboveNormal
§
High
§
NotRemovable
·
onRemoveCallback: (System.Web.Caching.CacheItemRemovedCallback) Es un delegado que se llama cuando se quita un objeto de la memoria caché. Se
puede utilizar para enviar notificaciones a aplicaciones cuando algún objeto se
elimina de la caché.
En el próximo artículo voy a comentar sobre el tipo de almacenamiento "Caché de resultados de páginas".
Ejemplos (en C#):
Dependencies:
En el
siguiente ejemplo se agregan 2 dependencias al objeto de la cache.
System.Web.Caching.CacheDependency dependencia1 = new System.Web.Caching.CacheDependency(Server.MapPath("archivo.txt"));
string[] keyDependencia2 = { "CacheItem1" };
System.Web.Caching.CacheDependency dependencia2 = new System.Web.Caching.CacheDependency(null, keyDependencia2);
System.Web.Caching.AggregateCacheDependency DependenciasAgregadas = new System.Web.Caching.AggregateCacheDependency();
DependenciasAgregadas.Add(dependencia1);
DependenciasAgregadas.Add(dependencia2);
Cache.Insert("ArchivoCache", File.ReadAllText("archivo.txt"), DependenciasAgregadas);
absoluteExpiration:
en el
ejemplo se le agregan 30 minutos al objeto para eliminarse:
Cache.Insert("ArchivoCache", "CacheContents", null, DateTime.Now.AddMinutes(30),Cache.NoSlidingExpiration);
slidingExpiration:
en
este ejemplo se indican 30 minutos para la eliminación si el objeto no se
utiliza:
Cache.Insert("CacheItem", "Item en cache", null, System.Web.Caching.Cache.NoAbsoluteExpiration, new TimeSpan(0, 30, 0)); // horas, minutos, segundos.
priority:
en el ejemplo siguiente se asigna
prioridad alta al objeto s:
String s = “Cadena a guardar”; Cache.Insert("Cadena",s, null, DateTime.Now.AddMinutes(30), Cache.NoSlidingExpiration, CacheItemPriority.High, onRemove)