Redis в Go-проектах: кэш, локи и rate limiting
Практический курс о том, где Redis действительно нужен Go-сервису и как его встроить так, чтобы он не стал точкой отказа.
Цель: научиться использовать Redis как системный компонент Go-проекта — с осознанными политиками отказа, корректным клиентом и продакшен-паттернами: кэш-aside без stampede, распределённые локи без самообмана, и главное — rate limiting в кластере: Token Bucket на Lua, лимитирование входящих запросов (middleware, гибрид local+global) и лимитирование вызовов внешних API (throttle, уважение Retry-After, circuit breaker).
Состав:
- Redis в Go-проекте: клиент как системный компонент — карта применений, go-redis: пулы, таймауты, health; fail-open против fail-close.
- Кэш и распределённые локи — cache-aside без stampede (singleflight), SET NX PX + токен, честные границы Redlock.
- Rate limiting: алгоритмы и Token Bucket на Redis — fixed window и его клык, sliding window, token bucket, GCRA; Lua-скрипт с атомарным refill/consume и защитой от скачка часов.
- Входящие запросы: middleware и гибрид — ключи лимитирования (IP/user/API key, XFF и подмена), 429 + Retry-After + X-RateLimit-*, гибрид local+global с graceful degradation.
- Исходящий rate limit: вызовы внешних API — throttle вместо reject, резервирование токенов, уважение Retry-After провайдера, circuit breaker, очередь вызовов.
- Кластер и эксплуатация — поведение при failover, метрики и алерты лимитера, конкурентный тест точности, чек-лист продакшена.
Формат: теория с Go-кодом (go-redis/v9) в каждом уроке, лабораторные
с воспроизведением отказов, квиз с разбором, готовый Lua-скрипт Token Bucket
и production-паттерны из боевого Go-шаблона.
Темп: ~6 недель (45–55 часов). Базовый Go и Docker — в активе; курс «Redis как брокер» трека брокеров — не обязателен, но полезен.