Разработка

Redis: не только кэширование

Большинство разработчиков используют Redis как быстрый key-value кэш. Но это только вершина айсберга. Redis – это универсальный in-memory инструмент, который отлично подходит для построения высоконагруженных систем. В этой статье рассмотрим практические сценарии использования Redis с примерами кода.

ИК

Игорь Кривошей

Специалист по разработке и DevOps

23 марта 2026 г.·~8–10 минут
Redis: не только кэширование

1. Очереди (Queues)

Redis идеально подходит для реализации простых очередей задач.

Использование: background jobs, обработка событий

Основные команды:

  • LPUSH- добавить в очередь

  • RPOP/BLPOP— получить из очереди

Пример (Node.js + ioredis)

JavaScript
import Redis from 'ioredis';

const redis = new Redis();

// Producer (додає задачу)
async function addJob(data) {
  await redis.lpush('queue:emails', JSON.stringify(data));
}

// Worker (обробляє задачі)
async function worker() {
  while (true) {
    const res = await redis.brpop('queue:emails', 0);
    const job = JSON.parse(res[1]);

    console.log('Processing:', job);
  }
}

worker();

Плюсы:

  • Простота

  • Мгновенная обработка

Минус:

  • Нет retry/ack (для более сложных кейсов лучше BullMQ)

2. Pub/Sub (Publish/Subscribe)

Redis позволяет реализовать систему сообщений в реальном времени.

Использование: чаты, нотификации, WebSocket

Пример

JavaScript
// subscriber.js
const sub = new Redis();

sub.subscribe('chat');

sub.on('message', (channel, message) => {
  console.log(`New message: ${message}`);
});
JavaScript
// publisher.js
const pub = new Redis();

Особенность:

  • Сообщения не сохраняются (это не очередь!)

3. Rate Limiting (ограничение запросов)

Один из самых популярных кейсов – защита API.

Использование:

  • защита от DDoS

  • ограничение запросов пользователя

Пример (Fixed Window)

JavaScript
async function rateLimit(ip) {
  const key = `rate:${ip}`;
  
  const current = await redis.incr(key);

  if (current === 1) {
    await redis.expire(key, 60); // 60 сек
  }

  if (current > 100) {
    throw new Error('Too many requests');
  }
}

Альтернатива:

  • Sliding window (более точный контроль)

  • Token bucket (для API)

4. Сессии пользователей

Redis часто используют в качестве storage для сессий.

Использование:

  • авторизация

  • shopping cart

  • временные данные

Пример

JavaScript
// збереження сесії
await redis.set(
  `session:${sessionId}`,
  JSON.stringify({ userId: 123 }),
  'EX',
  3600
);

// отримання
const session = JSON.parse(
  await redis.get(`session:${sessionId}`)
);

Плюсы:

  • быстро

  • TTL "из коробки"

5. Геопространственные данные (Geo)

Redis имеет встроенную поддержку геоданных.

Использование:

  • поиск "рядом со мной"

  • доставка

  • карты

Команды:

  • GEOADD

  • GEORADIUS

  • GEODIST

Пример

JavaScript
// додаємо координати
await redis.geoadd('drivers', 30.5234, 50.4501, 'driver_1');

// шукаємо поруч (5 км)
const nearby = await redis.georadius(
  'drivers',
  30.5234,
  50.4501,
  5,
  'km'
);

console.log(nearby);

6. Счетчики и аналитика

Redis отлично подходит для real-time метрик.

Использование:

  • просмотры страниц

  • лайки

  • аналитика

Пример

JavaScript
await redis.incr('page:home:views');

Или из TTL:

JavaScript
await redis.incr('stats:today');
await redis.expire('stats:today', 86400);

7. Distributed Locks (распределенные блокировки)

Для синхронизации между сервисами.

Использование:

  • избегание race conditions

  • cron jobs

Пример

JavaScript
const lock = await redis.set('lock:job', '1', 'NX', 'EX', 10);

if (lock) {
  console.log('Lock acquired');
  // виконуємо задачу
}

Вывод

Redis – это не просто кэш, а мощный инструмент для построения:

  • высоконагруженных API

  • асинхронных систем

  • real-time приложений

  • геосервисов

Если ты используешь Redis только для кэша – ты используешь ~20% его возможностей.

Когда следует использовать Redis

Да:

  • нужна скорость (миллисекунды)

  • временные или часто изменяемые данные

  • real-time логика

Нет:

  • сложные транзакции

  • длительное хранение критических данных

Теги
RedisBackendArchitectureQueuesPerformance

Shipstack

Готовы внедрить это на практике?

Обсудим архитектуру, сроки и стек — без шаблонных презентаций, по делу.