Usando Caché en Memoria para Mejorar Rendimiento en ASP.NET Core

Usando Caché en Memoria para Mejorar Rendimiento en ASP.NET Core

El almacenamiento en caché es una de las técnicas más útiles para aumentar la velocidad de respuesta de una aplicación, en este caso estaremos hablando de cómo utilizar esta funcionalidad en tu aplicación web desarrollada en ASP .NET Core y  aprenderás cuales son las ventajas y que debes tomar en cuenta estés usando caché en memoria.

¿Cuando Utilizar Memoria en Caché?

Podemos utilizar el almacenamiento de memoria cache a nuestro favor cuando tenemos recursos en nuestra aplicación que se consultan constantemente y su información no tiene mucha variación. +

Nota: Este último punto es bien importante, si la data que consultamos cambia de manera frecuente en vez mejorar podemos afectar el rendimiento de muestra aplicación haciendo que se acumule más información en la memoria del servidor.

Para que tengas más claro cuando utilizar la memoria te en cuenta las siguientes reglas:

  • La memoria en cache debe permitir retornar más rápido la información que consultando la fuente original.
  • Tu aplicación debe siempre poder consultar sus recursos sin tener un dependencia total del almacenamiento en memoria.
  • El almacenamiento en memoria es limitado y se debe tener pendiente:
    • Especificar tiempo de vencimiento de la memoria cache.
    • No utilices entradas externas para indicar los cache key.

Bien, dicho lo anterior comenzamos…

will ferrell start GIF
will ferrell start GIF

Ahora si: ¿Cómo Mejorar el Rendimiento con Caché en Memoria de App en .Net Core?

Comenzar a utilizar memoria en cache en .NET Core es bastante sencillo, para agregar este servicio solo debemos referenciar en nuestro ConfigureServices llamando al método extensión AddMemoryCache.

Esto nos permitirá utilizar la clase IMemoryCache a través de inyección de dependencia y ahora en nuestro constructor podemos hacer lo siguiente:

Ejemplos 1: Almacenar Información en Memoria

Ahora que tienes una instancia en tu controlador puedes almacenar información utilizando el método Set el cual recibe un key, un objeto a almacenar y algunas opciones para la cache con la clase MemoryCaheEntryOptions que te explicaremos mas adelante:

En el código anterior podemos ver que la variable myObject es el objeto que quieres almacenar y le pasamos una instancia de MemoryCacheEntryOptions con las opciones de cache indicando un tiempo de expiración de 3 minutos.

Dentro de las opciones de cache también podemos setear:

  • SlidingSize: tiempo que puede durar el objeto sin ser accedido y que no sea removido.
  • Priority: prioridad que tiene el objeto para ser mantenido cuando sé la aplicación tenga que limpiar la memoria.
  • PostEvictionCallbacks: acepta una referencia a un método que será llamado cuando se limpie el objeto en memoria.
  • Size: tamaño que puede tener el objeto en memoria.

Puedes ver todas las opciones aquí: MemoryCacheEntryOptions

Ejemplo 2. Obtener Objeto en Memoria Cache

Para consultar un objeto que tienes memoria utilizamos el método Get <TItem> el cual recibe un key y devuelve nulo cuando no tiene resultados. Nota que puedes setear el tipo de objeto que deseas que devuelva.

También puedes utilizar el método GetOrCreate que te permite verificar si el objeto ya existe y en caso de que no crea un nuevo registro. Ver ejemplo:

Ejemplo 3. Remover Objecto en Memoria

Para remover un objecto en memoria cache puedes utilizar el método Remove que recibe el key del objeto en memoria. Ver ejemplo:

Recomendaciones

Como había mencionado anteriormente el cache en memoria es un poco limitado, podrás utilizarlo mas dependiendo bastante de la capacidad del servidor donde tengas alojada tu aplicación.

Dicho lo anterior, entiendo esta es su principal desventaja o bien limitante ya que debes tener mucha precaución con los objetos y el tiempo que duran en memoria para que tu aplicación no colapse.

Mi recomendación es que lo utilices con pequeñas llamadas a tu aplicación que sean frecuentes y que la data no cambie tanto, pero almacenando una cantidad de información pequeña.

Si necesitas almacenar objetos grandes que requieran mayor capacidad entonces es recomendable utilizar un servidor de cache distribuido que te ofrece mas capacidad para estos fines.

Espero les haya sido de ayudado el contenido y me dejas saber en la caja de comentarios tu opinión.

Leave a Comment