Hoy os voy a contar como implementar un sistema de cache en vuestra API REST, en este caso vamos a usar Azure Redis Cache.

En el ejemplo, he implementado un servicio que hace de middleware para “interceptar” la llamada que deseemos, y, antes de ir a la capa de repositorio a recoger el dato, valida si el resultado de esa llamada ya está cacheada.

Como en otros ejemplos, voy a trabajar con emuladores locales para el desarrollo y después con los servicios de Azure una vez desplegado, por lo tanto, lo primero será instalar el emulador local.

Azure Redis Cache

Azure Redis Cache es un almacén de datos en memoria basado en el código abierto Redis. En su uso como memoria cache ayuda a mejorar la escalabilidad y el rendimiento de sistemas backend. Además, se usa como memoria cache distribuida por lo que puedes compartir información cacheada con, por ejemplo, varias API’s.

Tiene otros usos como almacén de estructura de datos en memoria, base de dato no relacional distribuida y agente de mensajes.

Creación del servicio

Primero, vamos a crear el servicio de Cache desde el portal de Azure. Vamos al marketplece:

La cadena de conexión la obtenemos también del portal, una vez se ha creado el servicio.

Instalación de emulador local

Para instalar el emulador en local:

  1. Abrir PowerShell con permisos de administrador y ejecutar el siguiente comando:

2. Cuando finalice la instalación anterior, lanzar el siguiente comando:

3. Una vez instalado, para arrancar el emulador local, bastara con abrir una ventana de comandos y lanzar la instrucción:

4. Añadir la cadena de conexión localhost a los user-secrets:

Implementación en código

He creado dos Proyectos para alojar el servicio de cache llamados AzureRedisCache.CommonServices y AzureRedisCache.CommonServices.Contracts.

En ellos se ha implementado el servicio de cache que tiene los distintos métodos de obtención de valores de la cache, inserción y borrado, que queda así:

Para usarlo (yo lo voy a hacer desde el controller de mi API), hay que modificar el constructor, inyectar el servicio de cache y hacer la llamada a nuestro repositorio, pero a través del servicio de cache:

En esta llamada, estamos indicando a que método del repositorio se llama y que clave queremos asignar en la cache a esta llamada.

Configuración del servicio

Para la configuración del servicio en el entorno desplegado, es necesario incluir en los settings la cadena de conexión de la Azure Redis Cache y además hemos incluido un flag que nos permitirá habilitar o no la cache. Este flag lo habréis visto en el código del servicio, se lee al principio y aplica una variable de tipo bool para no hacer las llamadas a la cache.

Con esta configuración terminada, tendríamos nuestras llamadas con la cache implementada. Os dejo el código del ejemplo completo aquí.

Espero que os haya gustado la forma de implementarlo y que os sea útil.

Procesando…
¡Lo lograste! Ya estás en la lista.
Última modificación: junio 16, 2020

Autor

Comentarios

Comenta o responde a los comentarios

Tu dirección de correo no será publicada.