Войти Регистрация
Data base

131. Счётчик часового окна для лимита API

Лёгкая

Redis · Redis 7.4.11

В 2021 году GitHub перенёс лимитер API с Memcached на Redis: на каждого клиента — счётчик запросов в текущем окне, окно закрывается истечением ключа средствами Redis. Лимит в их примере — 5000 запросов в час.

Ключ окна — rl:<login>:<ГГГГММДДЧЧ>. Пришёл запрос от octocat 14 марта 2026 года в 10:37 UTC, значит ключ rl:octocat:2026031410. Окно живёт 3600 секунд с первого запроса в нём, повторные запросы TTL не продлевают.

Последняя команда должна вернуть значение счётчика после учёта этого запроса — по нему приложение решает, пропустить ли запрос.

В работе: Лимиты публичного API, защита логина от перебора, квоты на отправку SMS.

Как проверяем Движка Redis в браузере пока нет, поэтому здесь не запрос, а выбор решения. Выберите один вариант. После ответа — почему каждый вариант верный или нет. Ответ один на подход: после него показываем разбор.
строкиINCREXPIRESET NXrate limiter

Источник: кейс GitHub: лимитер API на Redis, 2021. Условие пересказано своими словами.

Давали на собеседовании? Ответов пока мало — ваш поможет.

Какая последовательность команд учтёт запрос и вернёт счётчик окна, не сбросив уже набранное значение?

  • SET … NX EX, затем INCR
  • SET … EX без NX, затем INCR
  • SETNX ключ 1, затем INCR
  • INCR по ключу без окна