Redis клиент для TypeScript: ioredis и redis

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Redis клиент для TypeScript: ioredis и redis

Redis — это высокопроизводительное хранилище данных в памяти, часто используемое для кэширования, управления сессиями, очередей сообщений и реального времени. При разработке на TypeScript (особенно в среде Node.js) вам понадобится надёжный клиент для взаимодействия с Redis. На сегодняшний день двумя основными кандидатами являются библиотеки redis (официальная от Redis) и ioredis (популярная сторонняя альтернатива). Обе поддерживают TypeScript из коробки, но имеют различия в API, производительности и дополнительных функциях.

1. Библиотека ioredis

ioredis — это полнофункциональный Redis-клиент для Node.js, написанный на TypeScript. Он считается де-факто стандартом в сообществе благодаря своей надёжности, поддержке кластеров, Sentinel и встроенным возможностям для работы с потоками данных.

Установка

npm install ioredis
# или
yarn add ioredis

Подключение и базовый пример

import Redis from 'ioredis';

const redis = new Redis({
  host: 'localhost',
  port: 6379,
  // password: 'your-password', // если требуется
  retryStrategy: (times) => {
    // стратегия повторного подключения
    return Math.min(times * 50, 2000);
  }
});

redis.on('connect', () => {
  console.log('Подключено к Redis');
});

redis.on('error', (err) => {
  console.error('Ошибка Redis:', err);
});

// Использование async/await
async function demo() {
  await redis.set('user:1', JSON.stringify({ name: 'Иван', age: 30 }));
  const user = await redis.get('user:1');
  console.log('Полученные данные:', JSON.parse(user));
}

demo();

Особенности ioredis

  • Полная поддержка TypeScript — все методы имеют строгую типизацию, что позволяет IDE подсказывать типы аргументов и результатов.
  • Кластеры и Sentinel — встроенная поддержка кластерного режима Redis и автоматическое переключение при сбоях.
  • Потоковая обработка — удобный интерфейс для Redis Streams (XADD, XREAD, XGROUP).
  • Каналы (Pub/Sub) — простое подписывание на каналы и получение сообщений в реальном времени.
  • Pipeline и транзакции — группировка команд для повышения производительности.
  • Автоматическое переподключение — встроенная стратегия повторных попыток.

Пример с Pipeline

import Redis from 'ioredis';

const redis = new Redis();

async function pipelineDemo() {
  const pipeline = redis.pipeline();
  pipeline.set('key1', 'value1');
  pipeline.set('key2', 'value2');
  pipeline.get('key1');
  pipeline.get('key2');

  const results = await pipeline.exec();
  console.log('Результаты pipeline:', results);
  // [ [ null, 'OK' ], [ null, 'OK' ], [ null, 'value1' ], [ null, 'value2' ] ]
}

pipelineDemo();

2. Официальная библиотека redis

Начиная с версии 4.x, официальный клиент redis был полностью переписан на TypeScript. Он предлагает современный API на основе Promise, модульную архитектуру и глубокую интеграцию с TypeScript.

Установка

npm install redis
# или
yarn add redis

Подключение и пример

import { createClient } from 'redis';

const client = createClient({
  url: 'redis://localhost:6379'
  // или с паролем: 'redis://user:password@localhost:6379'
});

client.on('error', (err) => console.error('Ошибка Redis Client', err));

async function connectAndUse() {
  await client.connect();
  console.log('Подключено!');

  await client.set('session:123', 'active');
  const status = await client.get('session:123');
  console.log('Статус сессии:', status); // 'active'

  await client.disconnect();
}

connectAndUse();

Особенности redis (v4+)

  • Модульная архитектура — подключайте только нужные команды, уменьшая размер бандла.
  • Строгая типизация — каждый метод принимает и возвращает корректные типы.
  • Поддержка кластеров — через модуль @redis/client.
  • Встроенная поддержка JSON — через модуль redis-om (опционально).
  • Лучшая производительность — за счёт оптимизации внутренних буферов.

3. Сравнение ioredis и redis

Рекомендаций