Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Redis
Índice
Esquema 3
Ideas clave 4
9.1. Introducción y objetivos 4
9.2. Conceptos generales 5
9.3. Modelo de datos, estructura y módulos 8
© Universidad Internacional de La Rioja (UNIR)
A fondo 28
Test 30
© Universidad Internacional de La Rioja (UNIR)
Redis
Definición Principales conceptos Redis-cli
3
Ideas clave
Para darle un enfoque práctico a este tema, se recomienda llevar a cabo la instalación
y configuración de la herramienta en un entorno local. Para ello, sigue las
instrucciones del apartado 9.5 y luego continúa con los otros apartados propuestos.
Conforme vayas viendo los distintos comandos podrás ponerlos en práctica en tu
propia instalación de Redis.
Los objetivos que se pretenden conseguir con este tema son los siguientes:
Conocer los conceptos más generales que describen las características de la base
de datos Redis y su funcionamiento.
Entender la arquitectura y cómo esta provee de sencillez al motor de base de datos
para integrarse con otras herramientas.
Repasar las principales estructuras de datos, que son clave en el buen desempeño
de Redis como base de datos NoSQL en memoria.
Comprender los distintos escenarios donde Redis se adapta para dar solución a
aquellos casos donde el acceso al dato debe ser inmediato.
© Universidad Internacional de La Rioja (UNIR)
Las estructuras de datos son la clave principal de Redis. Esta base de datos soporta varias
estructuras de datos, las cuales se almacenan de tal forma que el concepto clave-valor
va un poco más allá. Las estructuras de datos que soporta Redis son:
String.
Lists.
Sets.
Sorted sets.
Hashes.
Bit arrays.
Streams.
HyperLogLogs.
Como toda base de datos NoSQL, no es necesario definir un modelo de datos para
poder trabajar con Redis.
Lo anterior ocurre también con la creación de tablas; estas no son necesarias para
utilizar y sacar provecho de la base de datos.
Redis almacena los datos en la memoria de acceso aleatorio (RAM) del servidor donde
esté instalado. Conforme los datos crecen, el uso de memoria también se incrementa,
igual que ocurre con Spark. En la versión Enterprise, Redis puede usar la memoria flash
disponible para que la base de datos almacene datos (como una unidad de estado sólido
dedicada).
En este escenario, las claves se alojan en la RAM y solo determinados valores se guardan
en la memoria flash. Si lo observamos de forma lógica, los valores más próximos a ser
usados estarán en la RAM, mientras que los menos próximos, en flash. LRU es el
algoritmo que utiliza Redis para decidir qué valores alojar en una memoria o en otra.
Redis emplea diferentes métodos para cumplir con las propiedades ACID (Atomicity,
Consistency, Isolation y Durability). Estos métodos son:
Aislamiento: cada comando o transacción que utiliza MULTI o EXEC queda aislado,
porque Redis es de un solo subproceso.
Los modelos de datos representan la forma en que se almacenan estos en una base de
datos. Cualquier aplicación que utilice dicho modelo estará sujeta a él para explotar de
la menor manera la forma de persistir los datos. Con el auge de las tecnologías NoSQL
como Redis, el modelo de datos puede ser un reflejo de la aplicación en sí.
© Universidad Internacional de La Rioja (UNIR)
En este sentido, Redis es una base de datos que soporta múltiples modelos de datos para
que estos se representen de múltiples formas, permitiendo así representar varios casos
de uso simultáneamente.
Redis almacena los datos mediante claves, las cuales pueden ser de cualquier tipo
porque realmente son elementos binarios. Para comprender este concepto, una imagen
puede ser usada como clave dentro de la base de datos. Aunque existe esta posibilidad,
por lo general las claves son cadenas simples.
Para trabajar con los distintos tipos de datos, Redis dispone de una serie de comandos
que permiten manipular dichos datos. SET y GET son dos de los comandos más usados
para tal fin. SET crea o cambia un valor que corresponde a una clave determinada. GET
recupera el valor asociado a una clave determinada.
SET sobrescribe los valores si se llama dos veces para la misma clave. El valor
último será el que se almacene con dicha instrucción. Los valores que
corresponden a una clave determinada se pueden formatear de muchas
formas para crear un modelo de datos específico para las necesidades de la
organización.
String y bitmaps
En Redis el tipo de valor más simple es un string. Los string se pueden agregar como
valor a la base de datos mediante el comando SET. La sintaxis de SET requiere una
clave y un valor para crear la entrada.
© Universidad Internacional de La Rioja (UNIR)
Por ejemplo, para crear una clave llamada cliente con un valor de Pepe, es necesario
ejecutar desde la CLI de Redis:
Los bitmaps, por su parte, son una forma de almacenamiento de cadenas donde se
pueden representar muchos elementos de datos que posean, por ejemplo, un estado
determinado activado (1) o desactivado (0) (el ejemplo más común es un usuario que
está activo o inactivo).
En un escenario donde solo se quiere saber estos estados, Redis es útil por el rápido
© Universidad Internacional de La Rioja (UNIR)
acceso y manipulación de dichos valores. Debido a que solo puede ser uno de dos
valores, puede representar esos datos de manera eficiente. 512 MB es el tamaño
máximo de un valor de cadena (según la versión de Redis), lo cual permite almacenar
232 valores posibles en dicha cadena.
Lists
En determinados escenarios una lista puede ser una matriz, pero Redis la utiliza como
lista vinculada que permite operaciones de escrituras muy rápidas. Se usan para
almacenar datos con algún tipo de relación. Las operaciones de lectura, por su parte,
pueden verse afectadas por la posición donde se encuentre el elemento en la lista.
Aunque no siempre es la mejor opción debido a los valores repetidos, cuando las
operaciones de lectura son importantes, se puede usar un SET. List implementa una
clave que contiene varios valores ordenados almacenados como string.
Los valores se pueden añadir al principio (left) o al final (right) de la lista y recuperar
dichos valores por su índice. Como existe libertad para almacenar valores, estos
podrán repetirse y hacer uso de claves diferentes para su consulta.
>LINDEX cliente 0
“Pepe”
>LINDEX cliente 1
“Javier”
>LINDEX cliente 2
“Juan”
Sets
Los sets son parecidos a las lists, pero se diferencian en dos aspectos:
1. En la forma de almacenar los valores porque utiliza una sola clave para almacenar
varios valores.
2. En la forma de recuperar los valores; no se usa índice de posición y tampoco se
ordenan.
A diferencia de las listas, los conjuntos no pueden tener miembros repetidos dentro
de la misma clave. Para evitarlo, Redis gestiona el almacenamiento interno de los
sets. Los sets tampoco tienen la operativa de asignar los valores left o right. Para
añadir valores se utiliza el comando SADD. Consultar todos los elementos de un set es
posible gracias a al comando SMEMBERS.
Hashes
El comando para crear el hash es HSET. Este permite recuperar valores concretos en
un hash concreto.
> HSET applicationID: 251 sesions: 12 requests: 123 forms: “register and
login”
> HGET applicationID: 251 sesions
12
Sets ordenados
Una variante de sets es su versión ordenada de los valores. Este tipo de datos se
utiliza cuando se quiere almacenar datos que deben estar clasificados. Al igual que
hash, una sola clave puede almacenar varios elementos. Cada valor está puntuado
con un número. Un ejemplo para este caso podría ser las veces que determinados
usuarios retuitean durante el día:
Pepe: 51.
Ana: 18.
© Universidad Internacional de La Rioja (UNIR)
Farith: 33.
ZRANGE recupera los miembros, pero no sus valores (el número de retuits). Para
recuperar tanto los nombres de los elementos como sus retuits, se añade el
parámetro WITHSCORES.
Observa que los elementos se ordenan de menor a mayor por el número de retuits.
Una forma de consultarlos con el orden contrario es mediante el comando ZREVRANGE.
Con el comando ZRANK es posible determinar en qué parte del set se encuentra un
elemento dado.
Este es un tipo de datos especializado muy útil en Redis. Se utiliza para mantener un
recuento estimado de elementos únicos. Un caso de uso común es emplearlo para
llevar a cabo un seguimiento de un recuento general de visitantes únicos al aula
virtual.
Este tipo de datos utiliza hash interno para determinar si ya existe el valor.
Estructuras
Para lograr esta comunicación, se usa el comando PUBLISH para crear el valor y
publicarlo.
1) "mensaje"
2) "clima"
3) "temperatura:32c"
Un cliente podrá suscribirse a la Comunidad de Madrid para recibir los datos del
clima. En el caso de que el cliente quiera todas las subclaves, es posible usar el
comodín (*).
Geoespacial
Cuando los datos están almacenados, es posible calcular la distancia entre dos puntos
(datos) utilizando funciones integradas.
En la última instrucción se calcula la distancia entre las dos torres de Madrid usando
el comando GEODIST. Por defecto este comando devuelve valores en metros, si se
quiere utilizar, por ejemplo, millas, se añade al final mi.
Streams
Como puede que los emisores o publicadores almacenen datos antiguos, los nuevos
consumidores podrán en cualquier momento pedir todos los mensajes disponibles.
Otra característica importante radica en que los mensajes se pueden etiquetar como
leídos por un cliente determinado. El comando XADD crea un stream y otros comandos
como XRANGE permiten manipular dicho elemento.
Al solicitar los mensajes, se pueden pedir solo aquellos que estén pendientes y, en
base a esos, realizar otras acciones.
© Universidad Internacional de La Rioja (UNIR)
Módulos principales
Implementa una base de datos de grafos en Redis. Las bases de
Redis Graph datos de grafos proporcionan un método para implementar la
teoría de grafos sobre los datos relacionados.
Es un motor de búsqueda de texto completo basado en el
almacenamiento de documentos dentro de Redis. Este módulo
RedisSearch utiliza funciones de búsqueda de alto rendimiento. Dentro de sus
características está el uso de búsquedas ponderadas, la lógica
booleana y el autocompletar, entre otras.
Permite almacenar datos de series de tiempo y trabajar con
RedisTimeSeries
dichos datos de una forma rápida.
Redis separa la administración del clúster de la arquitectura para que las solicitudes sean
atendidas tan rápido como lo serían si el servidor no se estuviera ejecutando en un
Capa de datos: en esta capa los datos se almacenan y administran, haciendo parte del
mismo núcleo como si se tratase de una única instancia de Redis (open source).
Proxy de latencia cero: los nodos del clúster utilizan un proxy para proporcionar
comunicación sin estado y multiproceso entre el cliente y el nodo.
Alta disponibilidad
Es importante en este punto volver a diferenciar las dos versiones que ofrece Redis para
trabajar. Por un lado, está Redis Open Source y, por otra parte, está Redis Enterprise.
Cuando se quiere conseguir una alta disponibilidad, con Redis Open Source el gasto en
RAM dificulta las réplicas del dato de forma simultánea.
Redis Enterprise, por su parte, ofrece alta disponibilidad sin necesidad de una tercera
réplica. En lugar de ello, emplea un tercer servidor mucho más pequeño para la
resolución del quorum en el caso de divisiones de red. Esta manera evita la necesidad de
Otra ventaja es que monitorea tanto a nivel de nodo como a nivel de clúster,
garantizando que los procesos relacionados con el rendimiento de los nodos funcionen
correctamente. Si un nodo deja de estar disponible o no responde, el guardián del nodo
comienza el proceso de conmutación por error del fragmento.
Para que puedas poner en marcha un servidor de Redis, en este apartado se propone
una instalación basada en Docker que permita de forma rápida acceder a Redis y realizar
las pruebas de los comandos antes vistos. A continuación, se indican los pasos de
instalación.
Docker con RS se ejecuta en su host local con el puerto 8443, el cual está abierto para
conexiones HTTPS, 9443 para conexiones de API REST y el puerto 12 000 abierto para
conexiones de cliente de Redis.
© Universidad Internacional de La Rioja (UNIR)
Si revisas Docker Desktop, deberías poder ver la nueva imagen de Redis en ejecución.
Paso 5: cuando solicite la licencia omite introducirla y da clic en Next. Luego introduce
un correo y asigne una contraseña a su cuenta de administrador.
© Universidad Internacional de La Rioja (UNIR)
Figura 7. Selección del tipo de base de datos, base de datos normal o en memoria.
Paso 7: asigna como nombre «databasetest», luego haz clic en Show advance
options y en el campo Endpoint port number indica el puerto 12 000.
Observa cómo cada base de datos utiliza un puerto por defecto en las
instalaciones por defecto: MySQL utiliza el puerto 3306, MongoDB el puerto
27017, Neo4J el puerto 7474… Por seguridad, los administradores de bases de
© Universidad Internacional de La Rioja (UNIR)
Después de crear la base de datos en Redis, la página web que debes ver es la
siguiente.
© Universidad Internacional de La Rioja (UNIR)
Paso 8: inicia redis-cli, conéctate a la base de datos creada y practica con todos
los comandos vistos en este tema.
9.6. Drivers
Python: se integra con Redis a través del paquete redis-py, aunque también
existen otros paquetes igual de compatibles.
Java: mediante estos tres clientes: Jedis, Lettuce y Redisson.
Usando Python
A continuación, se indican los pasos para usar Python con la instalación de Redis
llevada a cabo en el apartado anterior. Sigue las siguientes instrucciones desde
Jupyter de Anaconda u otra instalación similar.
Choi, J. M., Jeong, D. W., Yoon, J. S., y Lee, S. J. (2016). Digital forensics investigation
of Redis database. KIPS Transactions on Computer and Communication
Systems, 5(5), pp. 117-126.
Redis Labs. (2021). Get started with Redis [Página web]. https://redislabs.com/get-
started-with-redis/
Redis es una base de datos que cuenta con una documentación muy detallada y
orientada a casos de usos que pueden apoyarse en este tipo de bases de datos. En su
página web la documentación de la herramienta se enfoca en tres aspectos
importantes: configuraciones de uso, conexión a la base de datos y uso de clientes
para explotar Redis.
dicha documentación para que conozca las funcionalidades que cubre dicha versión,
con respecto a la versión open source.
Traversy Media. (19 de marzo de 2017). Redis Crash Course Tutorial [Archivo de vídeo].
https://www.youtube.com/watch?v=Hbt56gFj998
La mejor manera de comprender el uso que se le puede dar a las bases de datos como
Redis es analizando casos de estudios donde actualmente se esté implementando. La
web oficial de Redis dispone de varios casos de uso que pueden ser estudiados para
aprender el dominio de este tipo de base de datos. Consulta estos casos de uso, pero
© Universidad Internacional de La Rioja (UNIR)
4. ¿Cuál de estas instrucciones muestra todos los elementos de una lista llamada
clientes?
A. LINDEX clientes 0.
B. LRANGE clientes 0 -1.
© Universidad Internacional de La Rioja (UNIR)
C. LRANGE clientes 0 *.
D. GET clientes 1.