Como usar REDIS desde Windows y C# [Visual Studio 2015]

En esta entrada veremos algo sencillo pero útil que nos sirve de introducción a las nuevas tecnologías que cada vez son más escuchadas a la hora de trabajar o estudiar nuevas tecnologías en el día a día.

Es turno de Redis, un motor de base de datos NoSQL del tipo key-value caché con persistencia de información. Esto significa que funciona como cualquier caché muy comunes en frameworks web, funcionando como un array asociativo (por eso su descripción de ser key-value) pero manteniendo una persistencia de los datos tanto en memoria y disco duro.

También Redis es popular por ser un servidor de datos estructurados ya que permite no solo guardar un valor relacionado a una llave, sino estructuras diferentes como hashes, listas, bitmaps, hash ordenados y entre otros.

NOTA: Todas las imágenes al darle click se abrirán en una ventana aparte.

Instalando REDIS en Windows

Redis oficialmente no mantiene una versión de éste para Windows (su página oficial lo dice) pero al ser un proyecto open source, existe un fork mantenido por MSOpenTech donde existe la posibilidad de correr Redis en Windows.

Requisitos para instalar Redis:

  1. Sistema operativo de 64 bits
  2. Tener instalado el  gestor de paquetes de Windows Chocolatey (en el sitio vienen instrucciones para instalarlo)

Para instalar Redis en Windows con chocolatey es tan fácil como correr un command prompt ( en modo administrador) y correr el siguiente comando:

image

Una vez finalizada la instalación por chocolatey, podemos correr el programa redis-server.exe desde  cualquier ubicación en el cmd.

Si el command prompt dice que “redis-server is not recognized as an internal…” esto es porque chocolatey falló al registrar el path de instalación (c:/Program Files/Redis) en el PATH en las variables de sistema. En mi caso me ha ocurrido el que no me detecte el PATH así que si te salió haremos lo siguiente para registrarlo:

image

Ahora ya podemos correr el servidor escribiendo redis-server.exe en el CMD.

Creando una conexión desde C#

Estaré utilizando la versión de Visual Studio 2015 Community Edition que seguro ya la tienes o puedes descargar aquí.

Crearemos un proyecto en consola utilizando (importante) .NET 4.5 o superior, en esta ocasión el proyecto se llamará RedisConnectionTest :

image

Luego de ya tener un proyecto vacío de consola, tendremos que agregar un paquete de Nuget que será nuestro conector a Redis (StackExchange.Redis, proyecto mantenido por los creadores de StackOverflow).

Damo clic derecho a las referencias y agregamos un nuevo paquete de Nuget llamado StackExchange.Redis:

image

Una vez instalado el cliente Redis procederemos a crear una clase llamada RedisConnectorHelper, esta nos ayudará a tener a la mano la conexión a la base de datos, la definiremos de la siguiente manera:

image

De manera para trabajar con caché, necesitamos la conexión a la instancia del servidor Redis que instalamos anteriormente. Estas conexiones son manejadas por la clase ConnectionMultiplexer.

Para conectarnos a nuestra instancia de Redis llamamos al método estático ConnectionMultiplexer.Connect y le pasamos por parámetro el endpoint (nuestra cadena de conexión, en esta cadena podrá ir distintos parámetros que algunas instancias necesitan) de la conexión.

ConnectionMultiplexer está diseñado para ser compartido y reutilizable por toda la aplicación, y no necesita ser creado cada vez que se necesita hacer una operación básica. Si creamos muchas instancias de conexión cada vez que queremos hacer una operación con el caché, el rendimiento puede ser afectado. Además, si usamos instancias de Redis por ejemplo en Azure, estas tienen un límite de conexiones. Si se crean muchas instancias de ConnectionMultiplexer los límites pueden ser excedidos.

Una forma fácil de compartir la instancia de Multiplexer en nuestra aplicación es tener una propiedad static que regresa la conexión a la instancia, exactamente como se muestra en la imagen. Esto nos da la funcionalidad thread-safe. También el multiplexer nos reconectará a la instancia en caso de algún problema de conexión, buen trabajo Stack Exchange!.

Guardando/Consultando información del caché

Una vez que tenemos una forma fácil, reutilizable y thread-safe para acceder a nuestra caché de redis, veremos unos ejemplos simples de como guardar/leer información desde el programa en consola:

image

Creamos el método SaveBigData de ejemplo, donde se guardan 10,000 datos random entre 0 a 10,000. Lo importante aquí es ver como usamos nuestra clase helper de conexión.

Usamos el método GetDatabase del Multiplexer para tener acceso a la caché. Ésta instancia tiene demasiados métodos: puede leer, guardar, eliminar, incrementar datos, concatenar y en fin, todos los comandos que redis tiene. Hacemos uso de StringSet para guardar una cadena (o cualquier tipo primitivo) utilizando la llave “Device_Status:NUMBER”, que como se ve number es el valor de i conforme se va incrementando por el bucle.

Corremos nuestra instancia de Redis con redis-server.exe en un CMD y podemos correr esta aplicación que acabamos de escribir:

image

El funcionamiento de Redis es tener en memoria y dependiendo de ciertas reglas, guardará todo en disco duro. En este caso inmediatamente lo guardo en disco duro porque detecto que un montón de llaves fueron guardadas (como se puede ver en la imagen).

Para consultar estos datos random que acabos de agregar, hacemos uso de un método totalmente similar a StringSet: StringGet.

image

Queda de más explicarlo, corriendo la aplicación el resultado será claramente el esperado Smile:

image

Espero no haber trabado tu PC, ya que buscamos 10,000 registros (nah, no son muchos) y los imprimimos en pantalla.

Ojalá les haya sido de interés y utilidad, les dejo aquí el código fuente de este ejemplo.

Saludos y Code4Fun

Anuncios

3 comentarios sobre “Como usar REDIS desde Windows y C# [Visual Studio 2015]

  1. Grandioso ejemplo, da una idea muy aproximada para utilizarlo en un proyecto real, Sólo, como guinda, falta encontrar alguno así en github.

    Ojalá el blog vuelva con fuerza, es realmente interesante. Gracias!

  2. De StackExchange.Redis una guía rápida y fácil para empezar a usarlo (paquete nuget y configuración, y pequeño ejemplo de código fuente)

    http://tostring.it/2015/04/23/An-easy-way-to-use-StackExchange-Redis%20copy/

    Sin duda, una clase Wrapper-Helper facilitaría el uso, y como se comentaba en el hilo, no sé si tendrá sentido usar HttpContext.Current.Cache si Redis está caído, manteniendo un interfaz constante, independientemente que se guardara en Redis , o AppFabric, o HttpContext.Current.Cache.

    Alguna aplicación real quizá pueda servir de b uenas prácticas
    https://github.com/search?p=3&q=ConnectionMultiplexer.Connect+web&ref=searchresults&type=Code&utf8=%E2%9C%93

    En la referencia anterior, también aparece “All you need to know about Redis” pero aplicado a Azure
    http://tostring.it/2015/03/05/all-you-need-to-know-about-redis/

    Algún concepto de WebFarms
    http://www.jasoft.org/Blog/post/Escalabilidad-Granjas-web-con-ASPNET-e-IIS.aspx

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s