Redis клиент для TypeScript: ioredis и redis (node-redis)

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

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

Начать курс

Redis клиент для TypeScript: ioredis и redis (node-redis)

В мире современных веб-приложений и микросервисов Redis является одним из самых популярных хранилищ данных в оперативной памяти. Он используется для кэширования, управления сессиями, очередей задач, Pub/Sub и многого другого. Если вы разрабатываете на TypeScript, вам понадобится надёжный клиент для взаимодействия с Redis. В этой статье мы рассмотрим два основных варианта: ioredis и redis (также известный как node-redis). Обе библиотеки имеют отличную поддержку TypeScript, активно поддерживаются и предоставляют широкий спектр возможностей.

Зачем нужен Redis клиент для TypeScript?

TypeScript добавляет статическую типизацию в JavaScript, что делает код более предсказуемым и уменьшает количество ошибок на этапе разработки. Redis клиент для TypeScript позволяет:

  • Работать с Redis командами с полной поддержкой типов.
  • Использовать автодополнение в IDE (IntelliSense).
  • Легко интегрироваться с современными фреймворками (NestJS, Express, Koa).
  • Упростить обработку ошибок и повторные подключения.

Библиотека ioredis

ioredis — это полнофункциональный Redis клиент, который долгое время был стандартом де-факто в Node.js экосистеме. Он поддерживает кластеризацию, Pub/Sub, конвейеризацию (pipelining), транзакции (MULTI/EXEC), автоматическое переподключение и многое другое. ioredis написан на TypeScript и предоставляет типы из коробки.

Установка

npm install ioredis
npm install @types/ioredis # если вы используете TypeScript < 4.0

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

import Redis from 'ioredis';

// Создаём подключение к Redis (по умолчанию localhost:6379)
const redis = new Redis();

// Асинхронная функция для демонстрации
async function demo() {
  try {
    // Установка значения
    await redis.set('user:1:name', 'Анна');
    await redis.set('user:1:age', 30);

    // Получение значения
    const name = await redis.get('user:1:name');
    console.log('Имя пользователя:', name);

    // Работа с хешами
    await redis.hset('user:2', 'name', 'Иван', 'age', 25);
    const user2 = await redis.hgetall('user:2');
    console.log('Пользователь 2:', user2);

    // Инкремент
    const views = await redis.incr('page:home:views');
    console.log('Просмотры страницы:', views);

    // Установка с истечением времени (TTL)
    await redis.setex('temp:code', 60, '123456');
    const ttl = await redis.ttl('temp:code');
    console.log('Оставшееся время жизни ключа:', ttl, 'сек');

  } catch (error) {
    console.error('Ошибка Redis:', error);
  } finally {
    // Закрываем соединение
    redis.disconnect();
  }
}

demo();

Поддержка кластеров и Pub/Sub

ioredis отлично работает с Redis кластерами. Для этого используется специальный класс Cluster:

import Redis from 'ioredis';

const cluster = new Redis.Cluster([
  { host: '127.0.0.1', port: 7000 },
  { host: '127.0.0.1', port: 7001 },
  { host: '127.0.0.1', port: 7002 }
]);

await cluster.set('foo', 'bar');
const value = await cluster.get('foo');
console.log(value); // 'bar'

Для Pub/Sub используется отдельное подключение, так как подписчик не может выполнять обычные команды:

import Redis from 'ioredis';

const subscriber = new Redis();
const publisher = new Redis();

subscriber.subscribe('news', (err, count) => {
  console.log(`Подписан на ${count} канал(ов)`);
});

subscriber.on('message', (channel, message) => {
  console.log(`Получено сообщение из канала ${channel}: ${message}`);
});

// Публикация сообщения
publisher.publish('news', 'Привет из TypeScript!');

Библиотека redis (node-redis)

redis (пакет redis на npm) — это официальный клиент от Redis. Начиная с версии 4.0, он был полностью переписан на TypeScript и получил современный API с промисами, поддержку модулей Redis (Redis Stack) и улучшенную производительность. Это рекомендуемый выбор для новых проектов.

Установка

npm install redis

Типы уже встроены, дополнительно устанавливать ничего не нужно.

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

import { createClient } from 'redis';

// Создаём клиента
const client = createClient({
  url: 'redis://localhost:                    

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