Cliente Redis para TypeScript: ioredis e redis (node-redis)

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Cliente Redis para TypeScript: ioredis e redis (node-redis)

\n\n

No mundo das aplicações web modernas e microsserviços, o Redis é um dos armazenamentos de dados em memória mais populares. Ele é usado para cache, gerenciamento de sessões, filas de tarefas, Pub/Sub e muito mais. Se você está desenvolvendo em TypeScript, precisará de um cliente confiável para interagir com o Redis. Neste artigo, veremos duas opções principais: ioredis e redis (também conhecido como node-redis). Ambas as bibliotecas têm excelente suporte a TypeScript, são ativamente mantidas e oferecem uma ampla gama de recursos.

\n\n

Por que preciso de um cliente Redis para TypeScript?

\n

TypeScript adiciona tipagem estática ao JavaScript, tornando o código mais previsível e reduzindo o número de erros durante o desenvolvimento. Um cliente Redis para TypeScript permite:

\n
    \n
  • Trabalhar com comandos Redis com suporte total a tipos.
  • \n
  • Usar autocompletar na IDE (IntelliSense).
  • \n
  • Integrar-se facilmente com frameworks modernos (NestJS, Express, Koa).
  • \n
  • Simplificar o tratamento de erros e reconexões.
  • \n
\n\n

Biblioteca ioredis

\n

ioredis é um cliente Redis completo que foi por muito tempo o padrão de facto no ecossistema Node.js. Ele suporta clusterização, Pub/Sub, pipelining, transações (MULTI/EXEC), reconexão automática e muito mais. O ioredis é escrito em TypeScript e fornece tipos prontos para uso.

\n\n

Instalação

\n
npm install ioredis\nnpm install @types/ioredis # se você usa TypeScript < 4.0
\n\n

Exemplo de conexão e operações básicas

\n
import Redis from 'ioredis';\n\n// Cria uma conexão com o Redis (padrão localhost:6379)\nconst redis = new Redis();\n\n// Função assíncrona para demonstração\nasync function demo() {\n  try {\n    // Definir valor\n    await redis.set('user:1:name', 'Ana');\n    await redis.set('user:1:age', 30);\n\n    // Obter valor\n    const name = await redis.get('user:1:name');\n    console.log('Nome do usuário:', name);\n\n    // Trabalhar com hashes\n    await redis.hset('user:2', 'name', 'João', 'age', 25);\n    const user2 = await redis.hgetall('user:2');\n    console.log('Usuário 2:', user2);\n\n    // Incremento\n    const views = await redis.incr('page:home:views');\n    console.log('Visualizações da página:', views);\n\n    // Definir com expiração (TTL)\n    await redis.setex('temp:code', 60, '123456');\n    const ttl = await redis.ttl('temp:code');\n    console.log('Tempo restante de vida da chave:', ttl, 'seg');\n\n  } catch (error) {\n    console.error('Erro Redis:', error);\n  } finally {\n    // Fecha a conexão\n    redis.disconnect();\n  }\n}\n\ndemo();
\n\n

Suporte a clusters e Pub/Sub

\n

O ioredis funciona muito bem com clusters Redis. Para isso, usa-se a classe 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, usa-se uma conexão separada, pois o assinante não pode executar comandos comuns:

\n
import Redis from 'ioredis';\n\nconst subscriber = new Redis();\nconst publisher = new Redis();\n\nsubscriber.subscribe('news', (err, count) => {\n  console.log(`Inscrito em ${count} canal(is)`);\n});\n\nsubscriber.on('message', (channel, message) => {\n  console.log(`Mensagem recebida do canal ${channel}: ${message}`);\n});\n\n// Publicar mensagem\npublisher.publish('news', 'Olá do TypeScript!');
\n\n

Biblioteca redis (node-redis)

\n

redis (pacote redis no n

Recommendations