Redis
CÁTEDRA: Estrategias de Persistencia
Redis
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.
Base de datos clave-valor
¿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.
Ejemplo
Guardar el nombre de un usuario:
SET usuario:123 "Juan"
Acá:
Después, si querés obtenerlo:
GET usuario:123
Y te devuelve: "Juan"
Base de datos en memoria
¿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.
Ejemplo
Supongamos que tenés una web que muestra las 10 noticias más leídas.
SET noticias_top "['Noticia A', 'Noticia B', 'Noticia C']"
GET noticias_top
El GET devuelve el resultado casi instantáneamente, porque está en RAM.
¿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).
Ejemplo de flujo
API
Ejemplo de flujo
API
Ejemplo de flujo
¿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:
¿Para qué se usa Redis?
Usando Redis con Node.js
Instalar la librería:
npm install redis
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);
});
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.
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
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');
Operaciones básicas (tipo CRUD)
DELETE / DEL
await client.del('usuario:1');
Otros comandos útiles:
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);
});