Cliente Redis para TypeScript: ioredis y redis (node-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 TypeScript: ioredis y redis (node-redis)

\n\n

En el mundo de las aplicaciones web modernas y los microservicios, Redis es uno de los almacenes de datos en memoria más populares. Se utiliza para almacenamiento en caché, gestión de sesiones, colas de tareas, Pub/Sub y mucho más. Si desarrollas en TypeScript, necesitarás un cliente confiable para interactuar con Redis. En este artículo, analizaremos dos opciones principales: ioredis y redis (también conocido como node-redis). Ambas bibliotecas tienen un excelente soporte para TypeScript, se mantienen activamente y ofrecen una amplia gama de funcionalidades.

\n\n

¿Por qué necesitas un cliente Redis para TypeScript?

\n

TypeScript agrega tipado estático a JavaScript, lo que hace que el código sea más predecible y reduce la cantidad de errores en la etapa de desarrollo. Un cliente Redis para TypeScript te permite:

\n
    \n
  • Trabajar con comandos de Redis con soporte completo de tipos.
  • \n
  • Usar autocompletado en el IDE (IntelliSense).
  • \n
  • Integrarse fácilmente con frameworks modernos (NestJS, Express, Koa).
  • \n
  • Simplificar el manejo de errores y las reconexiones.
  • \n
\n\n

Biblioteca ioredis

\n

ioredis es un cliente Redis con todas las funciones que durante mucho tiempo fue el estándar de facto en el ecosistema Node.js. Admite clustering, Pub/Sub, canalización (pipelining), transacciones (MULTI/EXEC), reconexión automática y mucho más. ioredis está escrito en TypeScript y proporciona tipos listos para usar.

\n\n

Instalación

\n
npm install ioredis\nnpm install @types/ioredis # si usas TypeScript < 4.0
\n\n

Ejemplo de conexión y operaciones básicas

\n
import Redis from 'ioredis';\n\n// Crear una conexión a Redis (por defecto localhost:6379)\nconst redis = new Redis();\n\n// Función asíncrona para demostración\nasync function demo() {\n  try {\n    // Establecer un valor\n    await redis.set('user:1:name', 'Ana');\n    await redis.set('user:1:age', 30);\n\n    // Obtener un valor\n    const name = await redis.get('user:1:name');\n    console.log('Nombre de usuario:', name);\n\n    // Trabajar con hashes\n    await redis.hset('user:2', 'name', 'Juan', 'age', 25);\n    const user2 = await redis.hgetall('user:2');\n    console.log('Usuario 2:', user2);\n\n    // Incremento\n    const views = await redis.incr('page:home:views');\n    console.log('Vistas de página:', views);\n\n    // Establecer con tiempo de expiración (TTL)\n    await redis.setex('temp:code', 60, '123456');\n    const ttl = await redis.ttl('temp:code');\n    console.log('Tiempo de vida restante de la clave:', ttl, 'seg');\n\n  } catch (error) {\n    console.error('Error de Redis:', error);\n  } finally {\n    // Cerrar la conexión\n    redis.disconnect();\n  }\n}\n\ndemo();
\n\n

Soporte para clústeres y Pub/Sub

\n

ioredis funciona muy bien con clústeres de Redis. Para ello se utiliza la clase especial Cluster:

\n
import Redis from 'ioredis';\n\nconst cluster = new Redis.Cluster([\n  { host: '127.0.0.1', port: 7000 },\n  { host: '127.0.0.1', port: 7001 },\n  { host: '127.0.0.1', port: 7002 }\n]);\n\nawait cluster.set('foo', 'bar');\nconst value = await cluster.get('foo');\nconsole.log(value); // 'bar'
\n\n

Para Pub/Sub se utiliza una conexión separada, ya que el suscriptor no puede ejecutar comandos normales:

\n
import Redis from 'ioredis';\n\nconst subscriber = new Redis();\nconst publisher = new Redis();\n\nsubscriber.subscribe('news', (err, count) => {\n  console.log(`Suscrito a ${count} canal(es)`);\n});\n\nsubscriber.on('message', (channel, message) => {\n  console.log(`Mensaje recibido del canal ${channel}: ${message}`);\n});\n\n// Publicar un mensaje\npublisher.publish('news', '¡Hola desde TypeScript!');
\n\n

Biblioteca redis (node-redis)

\n

redis (paquete redis en n

Recommendations