Розробка

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

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

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