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.
Источник: кейс GitHub: лимитер API на Redis, 2021. Условие пересказано своими словами.
Какая последовательность команд учтёт запрос и вернёт счётчик окна, не сбросив уже набранное значение?
- SET … NX EX, затем INCR
- SET … EX без NX, затем INCR
- SETNX ключ 1, затем INCR
- INCR по ключу без окна