Cliente Redis para Node.js: ioredis — una potente herramienta para trabajar con Redis

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

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 ioredis


Despué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                    

Recommendations