Проверяет понимание атомарных операций Redis и их применения для счётчиков и rate limiting.
Redis — однопоточный по обработке команд сервер, поэтому каждая команда выполняется целиком, без прерываний. Команда INCR использует это свойство: она читает текущее значение ключа, прибавляет единицу и записывает результат как одну атомарную операцию. Это ключевое отличие от паттерна «GET, потом SET» на клиенте, где между чтением и записью другой клиент может изменить значение.
0, затем инкрементируется — итог 1.ERR value is not an integer or out of range.// Node.js (ioredis)
const Redis = require('ioredis');
const redis = new Redis();
// Счётчик просмотров страницы
await redis.incr('page:42:views');
// Rate limiting: не более 100 запросов в минуту
const key = `rl:${userId}:${Math.floor(Date.now() / 60000)}`;
const count = await redis.incr(key);
if (count === 1) await redis.expire(key, 60);
if (count > 100) throw new Error('Too many requests');
INCRBY key n — увеличить на произвольное число.DECR / DECRBY — уменьшение.INCRBYFLOAT — работа с дробными числами.SET key 0 — сброс счётчика.Итог: INCR стоит применять везде, где нужен надёжный счётчик без блокировок — метрики, лимиты запросов, генерация идентификаторов, счётчики попыток входа. Атомарность гарантирует корректность даже при высокой конкурентности.
Уровень
Рейтинг:
4
Сложность:
3
Навыки
Node.js
Redis
Ключевые слова
Подпишись на Node.js Developer в телеграм