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(опционально). - Лучшая производительность — за счёт оптимизации внутренних буферов.