Cliente Redis para Node.js: ioredis — uma ferramenta poderosa para trabalhar com 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 Node.js: ioredis



Redis é um armazenamento de dados em memória de alto desempenho, frequentemente usado como banco de dados, cache e broker de mensagens. Para interagir com o Redis a partir do Node.js, existem várias bibliotecas, mas uma das mais populares e funcionais é o ioredis. Esta biblioteca fornece uma API completa, performática e conveniente para trabalhar com Redis, suportando todos os recursos modernos, incluindo clusterização, pub/sub, transações e scripts Lua.



Neste artigo, vamos explorar detalhadamente o ioredis, sua instalação, principais funcionalidades e fornecer exemplos práticos de código em JavaScript (Node.js).



Instalação e conexão



A instalação do ioredis via npm ou yarn é simples:



npm install ioredis# ouyarn add ioredis


Após a instalação, crie uma instância do cliente:



const Redis = require('ioredis');const redis = new Redis(); // padrão localhost:6379

// Ou com parâmetros explícitosconst redis = new Redis({ host: 'localhost', port: 6379, password: 'sua_senha', // se uma senha foi definida db: 0});


A biblioteca suporta Promise e async/await, tornando o código limpo e legível.



Operações básicas com dados



O ioredis permite executar todos os comandos Redis padrão. Vejamos exemplos de trabalho com strings, listas e hashes.



Trabalhando com strings



async function stringExample() {  await redis.set('user:1:nome', 'Alexey');  const nome = await redis.get('user:1:nome');  console.log(nome); // Alexey

// Definindo com tempo de expiração (TTL) await redis.setex('temp:codigo', 60, '123456'); // vive por 60 segundos}


Trabalhando com listas



async function listExample() {  await redis.lpush('fila:tarefas', 'tarefa1', 'tarefa2');  await redis.rpush('fila:tarefas', 'tarefa3');  const tarefas = await redis.lrange('fila:tarefas', 0, -1);  console.log(tarefas); // ['tarefa2', 'tarefa1', 'tarefa3']}


Trabalhando com hashes



async function hashExample() {  await redis.hset('user:1', {    nome: 'Maria',    idade: 28,    cidade: 'Moscou'  });  const idade = await redis.hget('user:1', 'idade');  console.log(idade); // 28

const todosDados = await redis.hgetall('user:1'); console.log(todosDados); // { nome: 'Maria', idade: '28', cidade: 'Moscou' }}


Pub/Sub (publicador-assinante)



O Redis suporta o padrão pub/sub, e o ioredis fornece uma interface conveniente para isso. Importante: o assinante deve usar uma conexão separada.



// Assinanteconst subscriber = new Redis();subscriber.subscribe('noticias', 'atualizacoes', (err, count) => {  console.log(`Inscrito em ${count} canais`);});

subscriber.on('message', (canal, mensagem) => { console.log(`Recebido de ${canal}: ${mensagem}`);});

// Publicador (pode estar em outro processo)const publisher = new Redis();publisher.publish('noticias', 'Olá, mundo!');publisher.publish('atualizacoes', 'Versão 2.0 lançada');


Trabalhando com cluster Redis



O ioredis suporta muito bem a clusterização. Você só precisa passar a lista de nós do cluster:



const cluster = new Redis.Cluster([  { host: 'node1.exemplo.com', port: 6379 },  { host: 'node2.exemplo.com', port: 6379 },  { host: 'node3.exemplo.com', port: 6379 }]);

async function clusterExample() { await cluster.set('chave', 'valor'); const val = await cluster.get('chave'); console.log(val); // valor}


A biblioteca lida automaticamente com o redirecionamento de comandos entre nós (MOVED, ASK) e suporta slots.



Transações e pipelines



Para execução atômica de múltiplos comandos, use transações (MULTI/EXEC). Para melhorar a performance, use pipelines.



Transações



async function transaction                    

Recommendations