Azure redis Cache

A lo largo de este post, explicaré un ejemplo básico y sencillo de almacenamiento de objetos, en este caso una lista de la compra, con la funcionalidad de Azure, Redis Cache.  Para esta práctica es IMPORTANTE tener una cuenta en Azure, si no se tiene, omitid este post y volved cuando la tengáis.

Para el ejemplo, Redis Cache nos servirá para guardar en Cache todos los productos que marquemos como favoritos, así si cerramos el navegador y lo volvemos a abrir, permanezcan los que seleccionamos.

Para empezar, primero vamos a crearnos el correspondiente Redis Cache en azure. Para ello os vais a Azure y buscais Redis Cache.

Le ponéis el nombre que queráis, os creáis o elegís el grupo de recursos que ya tengáis. Para este proyecto nos bastará el plan Básico c0.

Es importante marcar «Desbloquear puerto 6379» para conexiones no SSL.  Por defecto, un Redis Cache está configurado para acceso SSL. Y le dais a Crear. Como tardará en crearse, pasamos mientras a Visual Studio.

Nos creamos un Proyecto Mvc normal, de nombre el que prefiráis.

E importamos los paquetes NuGet necesarios para la práctica. Para ello, sobre el proyecto>Click derecho>»Manage NuGet Packages…»,

y nos instalamos StackExchange.Redis y Newtonsoft.json. Si ya tuvierais instalado Newtonsoft, actualizarlo.

Ya tendría que estar el Redis cache creado, (si no, esperar) así que volvemos a Azure.

Buscamos y pinchamos en nuestro azurecache creado, pinchamos en «Claves de Acceso» y copiamos la cadena de conexión principal. Esto nos servirá para conectarnos a Azure desde Visual.

En Visual, vamos al Web.config de nuestro proyecto, y dentro de appSettings escribimos, <add key=»nombre_que_querais» value=»vuestra cadena de conexion»/>.

En nuestro ejemplo, no vamos a utilizar SSL, por lo que debemos indicar su valor a FALSE.  También debemos cambiar el puerto a 6379.

Para poder conectarnos, debemos crearnos un método de tipo ConnectionMultiplexer.

Para ello primero creamos, sobre el proyecto, una carpeta llamada en este caso, Helpers.

Dentro de esta creamos la clase AccesoRedisCache para realizar la conexión.

Esta clase tendrá:

En CadenaConexionRedis almacenamos la cadena conexión que pusimos en el Web.config.

El método conectar de tipo ConnectionMultiplexer, para conectarnos.

Para trabajar con clases Multiplexer y asegurarnos que existe solamente una instancia es crear métodos static que nos devuelvan los objetos en una clase Static.  Por eso nos creamos el método Connection. 

Ahora creamos en Models, la clase Alimentos. En esta poned los atributos que queráis o los que ponga en el xml que necesitareis. En mi caso:

Después sobre el proyecto os creáis una carpeta llamada Documentos y pegáis el documento xml que tengáis. Si no tenéis, haceros un xml.

El XML:

A continuación, nos hacemos la correspondiente clase ModeloAlimentos sobre Models, dónde tendremos dos métodos, uno para recuperar todos los productos y otro para ver los detalles de un producto seleccionado.

Primero inicializamos un XDocument para poder leer el xml.

El método GetAlimentos() para recuperar todos los productos:

Mediante .Descendants accedemos al elemento padre de los alimentos en el xml,en este caso producto.


A partir de esto, ya podemos guardarnos los alimentos del xml en nuestra clase Alimentos. Estamos creando un nuevo Alimento para cada producto y guardamos los valores de los atributos del xml en los atributos de nuestra clase.

El método BuscarAlimento:

Creamos en Controllers un Controlador MVC 5 Empty llamado AlimentosController.

En este primero inicializamos nuestro modelo y cogemos la ruta uri de nuestro xml.

Y creamos los ActionResult para Index y Detalles.

Dejad detalles como está, luego entenderéis porque hay TempDatas.

A continuación os creáis las vistas, bien vacías o bien con Scafolding (te crear la vista con diseño).

Click derecho sobre el ActionResult > «Add View…».

Vista vacía:

Vista con Scafolding:

Y lo mismo para detalles (si hacéis detalles con Scafolding, en vez de List, seleccionar Details).

Acordaos de, en la vista Index, quitar el comentario de la id en el ActionLink de Detalles, así como de cambiar el id por el idalimento que pusimos el en ActionResult de Detalles.

En Detalles, añadimos un ActionLink para poder añadir a favoritos.

Sobre Models, nos creamos una nueva clase llamada ModeloRedisCache, que será la encargada de devolvernos productos en Cache y almacenar productos. 

Debemos indicar la clave de redis para almacenar el objeto. Dicha clave debe ser unica entre aplicaciones si queremos utilizar redis cache para mas funcionalidades.

Creamos una clave redis con el nombre de nuestro proyecto y el nombre del objeto que deseamos almacenar (la clase Alimentos de Models).

El AlmacenarAlimentos():

BuscarAlimentos():

Ahora creamos el ActionResult de MisFavoritos (el que pusimos en el ActionLink de Detalles).

Como veis, estos TempData son los que pusimos en Detalles.

Si ejecutáis el programa veréis que después de marcar un producto como favorito, no podréis volver a hacerlo. Para que se os vea el mensaje, en la vista Detalles tenéis que haber puesto el ViewBag.Mensaje.

Con esto ya estaría hecha la funcionalidad del ejercicio. Si quisiéramos ver los productos que tenemos en favoritos, en ModeloRedisCache ponemos:

Para obtener los alimentos del cache.

 

Buscamos y devolvemos todas las claves que estén en cache.

 

Limpiar el cache con las claves obtenidas en el método anterior.

En AlimentosController realizamos la funcionalidad.

Primero creamos un ActionResult para que se vea una lista de los productos en cache:

Y para Limpiar el cache:

SOLO creamos la vista para ProductosFavoritos, si lo hacéis con Scafolding, es un List de alimentos.

Y en Index poneis un ActionLink para ProductosFavoritos, ejecutais Index y listo.

Y eso seria todo amigos. Animo y no desesperéis.

 

Autor/a: Carlos Crespo Oviedo

Curso: Microsoft MCSA Web Applications + Microsoft MCSD App Builder + Xamarin

Centro: Tajamar

Año académico: 2017-2018

Código: Enlace a GitHub

Leave a Comment

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.