1 of 23

Redis

CÁTEDRA: Estrategias de Persistencia

2 of 23

Redis

3 of 23

Redis

Redis es una base de datos en memoria, de estructura de datos clave-valor, de código abierto, muy rápida y ampliamente utilizada en desarrollo web y sistemas distribuidos.

Al ser una base de datos NoSQL, no utiliza tablas ni esquemas fijos, lo que le da mayor flexibilidad y rendimiento para ciertos tipos de aplicaciones.

4 of 23

Base de datos clave-valor

5 of 23

¿Qué es el modelo clave-valor?

Es una forma muy simple y rápida de almacenar información. Redis guarda los datos como pares:

clave → valor

Es decir, a cada clave única se le asigna un valor, como si fuera un gran diccionario o mapa.

6 of 23

Ejemplo

Guardar el nombre de un usuario:

SET usuario:123 "Juan"

Acá:

  • usuario:123 → es la clave
  • "Juan" → es el valor

Después, si querés obtenerlo:

GET usuario:123

Y te devuelve: "Juan"

7 of 23

Base de datos en memoria

8 of 23

¿Qué es una base de datos en memoria?

Una base de datos en memoria es un sistema que guarda todos los datos directamente en la RAM del servidor, en lugar de hacerlo en el disco duro.

Esto hace que las operaciones de lectura y escritura sean muchísimo más rápidas, porque acceder a la RAM es entre 10 y 100 veces más veloz que acceder al disco.

9 of 23

Ejemplo

Supongamos que tenés una web que muestra las 10 noticias más leídas.

  • Si consultás eso con MySQL, cada vez que alguien entra, el servidor busca en el disco y calcula.
  • Con Redis, podés guardar ese resultado ya calculado en memoria y devolverlo al instante:

SET noticias_top "['Noticia A', 'Noticia B', 'Noticia C']"

GET noticias_top

El GET devuelve el resultado casi instantáneamente, porque está en RAM.

10 of 23

¿Y si se apaga el servidor?

Como los datos están en RAM, si Redis no está configurado para guardar en disco, se pierden al reiniciar el servidor.

Por eso Redis permite opciones de persistencia, para guardar una copia en el disco periódicamente (si lo necesitás).

11 of 23

Ejemplo de flujo

API

12 of 23

Ejemplo de flujo

API

13 of 23

Ejemplo de flujo

14 of 23

¿Para qué se usa Redis?

Redis se utiliza principalmente cuando se necesita alta velocidad y eficiencia en el manejo de datos.

Entre sus usos más comunes se encuentran:

  • Caché de datos: para evitar consultas repetidas a bases de datos tradicionales.
  • Gestión de sesiones: guardar el estado de usuarios logueados en aplicaciones web.
  • Colas de trabajo: coordinar tareas en segundo plano (envío de emails, procesamiento).
  • Contadores y estadísticas: medir vistas, clics o interacciones en tiempo real.

15 of 23

¿Para qué se usa Redis?

  • Mensajería en tiempo real (Pub/Sub): útil en chats, notificaciones y eventos.

  • Almacenamiento temporal: guardar datos con expiración automática (ej. tokens).

16 of 23

Usando Redis con Node.js

17 of 23

Instalar la librería:

npm install redis

18 of 23

Conexión básica:

Redis recomienda usar conexiones asincrónicas modernas.

const redis = require('redis');

// Crear el cliente

const client = redis.createClient();

// Escuchar errores de conexión

client.on('error', (err) => {

console.error('Error en la conexión con Redis:', err);

});

19 of 23

Conexión básica:

// Conectarse a Redis (asincrónico)

(async () => {

try {

await client.connect();

console.log('Conectado a Redis exitosamente');

} catch (error) {

console.error('No se pudo conectar a Redis:', error);

}

})();

Por defecto, Redis escucha en localhost:6379.

20 of 23

Operaciones básicas (tipo CRUD)

Redis no es una base de datos relacional, así que no tiene un CRUD tradicional con tablas, pero sí tiene equivalentes con claves y valores:

CREATE / SET

await client.set('usuario:1', 'Juan');

Podés también agregar un vencimiento en segundos:

await client.set('codigo:1234', 'verificado', { EX: 300 }); // 5 minutos

21 of 23

Operaciones básicas (tipo CRUD)

READ / GET

const valor = await client.get('usuario:1');

console.log(valor); // 'Juan'

UPDATE

No hay una operación separada. Usás set otra vez:

await client.set('usuario:1', 'Juan Gomez');

22 of 23

Operaciones básicas (tipo CRUD)

DELETE / DEL

await client.del('usuario:1');

Otros comandos útiles:

  • INCR / DECR: contadores
  • EXISTS: verificar si una clave existe
  • EXPIRE: definir expiración a una clave
  • HSET, HGET: para guardar objetos tipo hash (diccionario)

23 of 23

Ejemplo de uso como caché

app.get('/productos', async (req, res) => {

const cacheKey = 'productos:populares';

const cache = await client.get(cacheKey);

if (cache) {

return res.json(JSON.parse(cache)); // Usar datos cacheados

}

const datos = await consultarBD(); // Consulta real

await client.set(cacheKey, JSON.stringify(datos), { EX: 60 }); // 60 seg

res.json(datos);

});