Cliente Redis para Node.js: ioredis
Redis es un almacén de datos en memoria de alto rendimiento, utilizado a menudo como base de datos, caché y broker de mensajes. Para interactuar con Redis desde Node.js existen varias bibliotecas, pero una de las más populares y funcionales es ioredis. Esta biblioteca proporciona una API completa, eficiente y conveniente para trabajar con Redis, soportando todas las capacidades modernas, incluyendo clustering, pub/sub, transacciones y scripts Lua.
En este artículo, analizaremos en detalle ioredis, su instalación, características principales y proporcionaremos ejemplos prácticos de código en JavaScript (Node.js).
Instalación y conexión
La instalación de ioredis a través de npm o yarn no presenta dificultades:
npm install ioredis# oyarn add ioredisDespués de la instalación, cree una instancia del cliente:
const Redis = require('ioredis');const redis = new Redis(); // por defecto localhost:6379
// O con parámetros explícitosconst redis = new Redis({ host: 'localhost', port: 6379, password: 'your_password', // si se ha establecido una contraseña db: 0});La biblioteca soporta Promise y async/await, lo que hace que el código sea limpio y legible.
Operaciones básicas con datos
ioredis permite ejecutar todos los comandos estándar de Redis. Veamos ejemplos de trabajo con strings, listas y hashes.
Trabajo con strings
async function stringExample() { await redis.set('user:1:name', 'Alejandro'); const name = await redis.get('user:1:name'); console.log(name); // Alejandro
// Establecer con tiempo de expiración (TTL) await redis.setex('temp:code', 60, '123456'); // vive 60 segundos}Trabajo con listas
async function listExample() { await redis.lpush('queue:tasks', 'task1', 'task2'); await redis.rpush('queue:tasks', 'task3'); const tasks = await redis.lrange('queue:tasks', 0, -1); console.log(tasks); // ['task2', 'task1', 'task3']}Trabajo con hashes
async function hashExample() { await redis.hset('user:1', { name: 'María', age: 28, city: 'Madrid' }); const age = await redis.hget('user:1', 'age'); console.log(age); // 28
const allData = await redis.hgetall('user:1'); console.log(allData); // { name: 'María', age: '28', city: 'Madrid' }}Pub/Sub (publicador-suscriptor)
Redis soporta el patrón pub/sub, e ioredis proporciona una interfaz conveniente para ello. Importante: el suscriptor debe usar una conexión separada.
// Suscriptorconst subscriber = new Redis();subscriber.subscribe('news', 'updates', (err, count) => { console.log(`Suscrito a ${count} canales`);});
subscriber.on('message', (channel, message) => { console.log(`Recibido de ${channel}: ${message}`);});
// Publicador (puede estar en otro proceso)const publisher = new Redis();publisher.publish('news', '¡Hola, mundo!');publisher.publish('updates', 'Versión 2.0 lanzada');Trabajo con clúster Redis
ioredis soporta excelentemente el clustering. Solo necesita pasar la lista de nodos del clúster:
const cluster = new Redis.Cluster([ { host: 'node1.example.com', port: 6379 }, { host: 'node2.example.com', port: 6379 }, { host: 'node3.example.com', port: 6379 }]);
async function clusterExample() { await cluster.set('key', 'value'); const val = await cluster.get('key'); console.log(val); // value}La biblioteca maneja automáticamente la redirección de comandos entre nodos (MOVED, ASK) y soporta slots.
Transacciones y pipelines
Para la ejecución atómica de múltiples comandos, use transacciones (MULTI/EXEC). Para mejorar el rendimiento, use pipelines.
Transacciones
async function transaction También en la biblioteca
Planificador de tareas en Go (Golang): cron, gocron y asynq
Trabajo con CSV en C++: biblioteca libcsv y herramientas estándar
Swagger-PHP para PHP: guía completa con ejemplos prácticos
Limitación de tasa en Rust: bibliotecas governor, leaky-bucket y middleware para servidores web
Serialización de objetos en Go (Golang): Guía completa