Revista Informática

Cómo instalar, configurar y usar Redis – Parte I

Publicado el 13 agosto 2013 por Codehero @codeheroblog

Nos encontramos en una época donde la velocidad en términos tecnológicos es una obligación. Cada día los sistemas se vuelven más poderosos y más capaces, lo cual nos ha acostumbrado a querer resultados lo más pronto posible. Este enfoque también ha abarcado el tema del almacenamiento de datos, este proceso en altos niveles de concurrencia suele ser un poco lento, lo peor es que muchas veces necesitamos bases de datos que no necesariamente tienen que poseer tablas relacionadas sino más bien tablas aisladas y de igual manera terminamos usando un MySQL, esta semana hablaremos de una novedosa solución que ha estado tomando fuerza rápidamente, la base de datos Redis.


¿Qué es Redis?

Es una solución de código abierto de almacenamiento de datos NoSQL basado en una estructura de Llave-Valor (key-value). El concepto de este tipo de bases de datos se enfoca en aquellos casos donde una estructura relacional no es necesaria sino más bien un identificador asociado a un valor o un conjunto de valores. Su nombre es un acrónimo de Servidor de DIccionario REmoto, puedes encontrar el código fuente del proyecto en su respositorio de Github.

Redis es sumamente veloz, esto debido a su sencilla estructura ausente de lógica relacional y su punto más importante, la base de datos está cargada en memoria, por ello sus altos niveles de velocidad. No te preocupes, aunque la información está en memoria y en efecto se pedería al apagarse el computador, Redis posee 2 estrategias de persistencia para mantener los datos seguros, lo cual hablaremos en la parte de configuración.

Si piensas manejar grandes volúmenes de datos que podrían sobrepasar tus capacidades de memoria, debes pensar en utilizar una base de datos basada en disco para los datos que no vayan a ser manipulados con tanta frecuencia y utilizar Redis para aquellos de alto nivel de uso (como datos de sesión, tokens, cuentas, etc.)

Es capaz de manejar altísimos niveles de concurrencia, por defecto esta establecido en 10000 pero puede ser fácilmente cambiado en la configuración. En este caso, la cantidad real de clientes que puede atender simultáneamente viene dada por la cantidad de descriptores de archivo que pueda manejar el sistema.

En Mac OS X se puede ver la cantidad de descriptores disponibles ejecutando el comando launchctl limit, en la variable maxfiles.

En otros sistemas *nix puedes utilizar el comando cat /proc/sys/fs/file-max.

Este valor es editable.

Otra ventaja de Redis es su facilidad para implementar estrategias de replicación de datos, teniendo un servidor central de Redis o maestro al cual responden varios servidores secundarios o esclavos, esto ofrece un gran nivel de escalabilidad y permite establecer ambientes de alta disponibilidad con mínimo esfuerzo.

Redis también puede ser utilizado para desarrollar soluciones enfocadas al paradigma de mensajería de publicaciones y suscripciones, sin embargo no haremos énfasis en esto.


Tipos de datos

Debido a la naturaleza Llave-Valor de la estructura de Redis, tenemos siempre una llave, el identificador único para cada registro en la base de datos, a una llave se le pueden asignar los siguientes tipos de dato:

  • Cadenas de caracteres

Esta es quizás la más fácil de entender, simplemente una llave posee un valor común y corriente tipo string:

Representación:
llave => valor
  • Listas

Este tipo de dato permite almacenar varias cadenas de caracteres ordenadas por orden de inserción en una llave, muy parecido al concepto de pilas y colas:

Representación:
llave => valor1 
         valor2 
         …
  • Juegos o Sets

Permite asignar a una llave una serie de cadenas de caracteres que no posee ningún orden. Una característica importante de los sets es que no permite miembros duplicados, al tratar de insertar un valor duplicado en un juego, este último solo tendrá una copia del mismo.

Su representación gráfica podría ser parecida a la de las listas aunque sin tomar en cuenta el orden de inserción.

  • Juegos ordenados o Sorted sets

Lo primero que pensarías que es es una lista que no permite duplicados, según lo que vimos anteriormente, pues no. Un juego ordenado, al igual que un juego convencional es una serie de cadenas de caracteres no duplicados que tienen asociado un puntaje, al cada miembro poseer un puntaje se determina el orden del juego del menor a mayor puntaje.

Representación:
llave => 80 valor2 
         25 valor1
         10 valor3 
         …
  • Hashes

Este tipo de dato es quizás uno de los más interesantes ya que suelen utilizarse para definir objetos o mapas. Un hash permite asignar a una llave una serie de atributos y valores, tal como lo haría un objeto común, veamos un ejemplo para apreciarlo mejor:

Representación:
user:1000 => usuario        jonathanwiesel 
             email          [email protected]
             nombre         Jonathan Wiesel
             …

Podemos notar en la nomenclatura usada para definir la llave que tratamos de seguir un estándar como si estuviéramos usando una tabla de base de datos común, donde user sería la tabla y 1000 el id del usuario, el uso de este tipo de nomenclatura no es obligatorio pero es recomendado para representar una estructura lógica y ordenada que sea fácilmente legible para cualquiera que manipule la base de datos.


Instalación

*nix

Antes que nada debemos asegurarnos de tener instalado en nuestro sistema las herramientas de compilación tales como build-essentials (sistemas basados en Debian), Development Tools (sistemas basados en Fedora/Red Hat) o similares.

Si no lo tienes no podrás ejecutar el comando make, en sistemas basados en Debian puedes instalarlo de la siguiente manera:

>

$ sudo apt-get update
$ sudo apt-get install build-essential
>

Además debemos tener la dependencia del Lenguaje de Herramientas de Comando o tcl.

Su instalación en sistemas basados en Debian sería:

$ sudo apt-get install tcl8.5
>

Ahora si, procedemos a descargar la ultima versión estable dirigiéndonos a la página de descargas de redis o simplemente lo hacemos vía wget de la siguiente manera:

$ wget http://redis.googlecode.com/files/redis-2.6.14.tar.gz

Suponiendo que la última versión es la 2.6.14.

Luego descomprimimos el .tar.gz y navegamos al nuevo directorio para compilar el código fuente y pruebas de velocidad y exactitud :

$ tar xzf redis-2.6.14.tar.gz
$ cd redis-2.6.14
$ make
$ make test

Finalmente lo instalamos:

$ sudo make install

Una vez instalado podemos utilizar un script que viene por defecto para poner a funcionar tu servidor Redis:

$ cd utils
$ sudo ./install_server.sh

Por ahora aceptemos la configuración predeterminada que nos pida el script ya que más adelante lo modificaremos manualmente según nuestras necesidades.

Una vez haya terminado el servidor se encontrará corriendo en el fondo.

Mac OS X

Como de costumbre, el método predilecto de instalación es usando Homebrew ejecutando el comando:

$ brew install redis

Si queremos iniciar el servidor Redis como un servicio debemos ejecutar el siguiente comando:

$ brew services start redis

De lo contrario podemos ejecutar:

$ redis-server /usr/local/etc/redis.conf

Para ambos casos esto iniciará el servidor utilizando el archivo de configuración que trae Redis por defecto.

Prueba

Finalmente probemos que nuestro servidor Redis esté funcionando ejecutando el comando redis-cli, y veremos algo como esto:

redis 127.0.0.1:6379>

Esto nos indica que en efecto nos hemos conectado al servidor Redis, en este caso en la dirección de localhost escuchando en el puerto estándar 6379. Aquí podremos ejecutar comandos propios de Redis, tal como si nos hubiésemos conectado por terminal a una base de datos MySQL.


Conclusión

Esta semana aprendimos un poco sobre el poder de Redis, su estructura y cómo instalarlo, la próxima semana estaremos tocando la parte de configuración, comandos básicos y otros detalles interesantes para que le saques el máximo provecho a esta nueva solución de almacenamiento de datos.


Volver a la Portada de Logo Paperblog