Базы данных

Учебник Redis для начинающих

37 уроков · 10 разделов · бесплатно, без регистрации

Redis — это сверхбыстрое хранилище данных в оперативной памяти, ставшее стандартом для кэширования, очередей и работы со структурами данных в реальном времени. Этот курс проведёт вас от основ in-memory хранилищ до продакшен-эксплуатации.

Вы освоите кэш-паттерны (cache-aside, write-through, защита от cache stampede), все базовые структуры данных и их внутреннее устройство, Pub/Sub и надёжные очереди на Streams, персистентность (RDB/AOF), распределённые блокировки и масштабирование. Запускаемые Python-врезки покажут, как структуры Redis устроены изнутри.

Курс «Redis: кэш и структуры в памяти» состоит из 10 разделов и 37 уроков: Что такое Redis и in-memory хранилища, Строки и базовые команды, Структуры данных Redis, Кэширование и TTL, Pub/Sub и очереди сообщений, Персистентность и продакшен, Продвинутые структуры: Bitmaps, HyperLogLog, Geo, Streams, Транзакции, скрипты и производительность, Паттерны Redis: блокировки, лимиты, рейтинги и Масштабирование и внутреннее устройство. Уроки идут по порядку — от основ к более сложным темам, в каждом есть объяснение с примерами, а в конце — вопросы для самопроверки. К урокам привязаны задачи с автоматической проверкой: прочитали тему — сразу закрепили её кодом.

Программа курса

  1. 1 Что такое Redis и in-memory хранилища

    1. Что такое Redis и зачем нужна память

      Redis — это in-memory хранилище данных: что это значит, почему оно в сотни раз быстрее диска и где применяется на практике.

    2. Установка Redis и первое подключение

      Как установить Redis локально через Docker и пакетный менеджер, подключиться через redis-cli и выполнить первые команды.

    3. Ключи, пространства имён и время жизни

      Как устроены ключи в Redis, зачем нужны двоеточия в именах, как работают EXPIRE и TTL и что такое истечение ключей.

  2. 2 Строки и базовые команды

    1. Строки: основной тип данных Redis

      Строки в Redis — это не только текст: числа, бинарные данные, JSON. Команды SET, GET, APPEND, GETSET и работа со строками.

    2. Числа, счётчики и атомарный инкремент

      Команды INCR, DECR, INCRBY и атомарные счётчики Redis: как считать просмотры, лайки и события без гонок данных.

    3. Транзакции и пайплайнинг

      MULTI/EXEC для группировки команд, WATCH для оптимистичных блокировок и пайплайнинг для снижения сетевых задержек.

  3. 3 Структуры данных Redis

    1. Списки: очереди и стеки

      Списки Redis (LPUSH, RPUSH, LPOP, RPOP, LRANGE): двусторонние очереди, стеки, ленты и блокирующие операции.

    2. Множества: уникальность и пересечения

      Множества Redis (SADD, SISMEMBER, SINTER, SUNION): хранение уникальных значений, теги, общие друзья и операции над множествами.

    3. Хеши: объекты и поля

      Хеши Redis (HSET, HGET, HGETALL, HINCRBY): хранение объектов с полями, профилей пользователей и экономия памяти.

    4. Sorted Sets: рейтинги и лидерборды

      Отсортированные множества Redis (ZADD, ZRANGE, ZRANK, ZSCORE): лидерборды, рейтинги, очереди с приоритетом и диапазонные запросы.

  4. 4 Кэширование и TTL

    1. Паттерн cache-aside

      Cache-aside (ленивое кэширование): как приложение кэширует данные из БД, схема работы, обработка промахов и попаданий.

    2. Стратегии записи: write-through и write-behind

      Стратегии записи в кэш: write-through (запись насквозь), write-behind (отложенная запись) и их компромиссы согласованности и скорости.

    3. TTL, политики вытеснения и maxmemory

      Управление памятью Redis: maxmemory, политики вытеснения allkeys-lru, volatile-ttl, LRU/LFU и стратегия выбора TTL.

    4. Защита кэша: стампед, лавина, проникновение

      Проблемы кэша под нагрузкой: cache stampede (thundering herd), cache penetration и cache avalanche, и как их предотвратить.

  5. 5 Pub/Sub и очереди сообщений

    1. Pub/Sub: рассылка событий в реальном времени

      Механизм Pub/Sub в Redis (PUBLISH, SUBSCRIBE, PSUBSCRIBE): рассылка сообщений подписчикам, каналы и паттерны.

    2. Очереди задач на списках

      Простые очереди задач на списках Redis: продюсеры и воркеры, RPUSH/BLPOP, надёжная очередь и обработка падений воркера.

    3. Redis Streams: надёжные очереди событий

      Redis Streams (XADD, XREAD, XREADGROUP, consumer groups): надёжные журналы событий с хранением, подтверждениями и группами потребителей.

  6. 6 Персистентность и продакшен

    1. Персистентность: RDB и AOF

      Сохранение данных Redis на диск: RDB-снапшоты, AOF-журнал команд, appendfsync everysec и гибридный режим для продакшена.

    2. Распределённые блокировки и атомарность через Lua

      Распределённые блокировки на Redis (SET NX EX), безопасное снятие и Lua-скрипты для атомарной логики read-modify-write.

    3. Продвинутые структуры: HyperLogLog, Bitmaps, Streams Stack

      Специальные структуры Redis: HyperLogLog для подсчёта уникальных, Bitmaps для флагов, и обзор модулей Redis Stack (JSON, Search, Bloom).

    4. Redis в продакшене: масштабирование и эксплуатация

      Redis в продакшене: репликация, Sentinel, Cluster, мониторинг через INFO, безопасность и чек-лист готовности к нагрузке.

  7. 7 Продвинутые структуры: Bitmaps, HyperLogLog, Geo, Streams

    1. Bitmaps: биты как данные

      Bitmaps в Redis: SETBIT, GETBIT, BITCOUNT, BITOP; аналитика присутствия (был ли пользователь сегодня) и экономия памяти — миллион флагов в 122 КБ.

    2. HyperLogLog: подсчёт уникальных приближённо

      HyperLogLog в Redis: PFADD, PFCOUNT, PFMERGE; приближённый подсчёт уникальных с погрешностью ~0.81% при постоянных ~12 КБ памяти и как устроен алгоритм.

    3. Гео-команды: координаты и радиус

      Гео-команды Redis: GEOADD, GEOSEARCH, GEODIST; поиск объектов рядом по радиусу, как это устроено на sorted set через geohash, на примере поиска ближайших кафе.

    4. Streams вглубь: consumer groups

      Streams в Redis вглубь: XADD, XREAD, XGROUP, XACK; consumer groups и PEL для надёжных очередей с подтверждением и отличие Streams от Pub/Sub и списков.

  8. 8 Транзакции, скрипты и производительность

    1. Транзакции: MULTI, EXEC, WATCH

      Транзакции Redis: пачка команд через MULTI/EXEC, оптимистичная блокировка WATCH и ключевое отличие от SQL — в Redis нет отката упавших команд.

    2. Lua-скрипты: атомарность и логика на сервере

      Lua-скрипты в Redis: EVAL и EVALSHA, почему скрипт атомарен, передача данных через KEYS и ARGV и когда скрипт лучше нескольких отдельных команд.

    3. Конвейеризация: убираем задержки сети

      Конвейеризация в Redis: что такое RTT, как pipelining отправляет команды пачкой без ожидания ответа, кратный выигрыш и чем это отличается от транзакций.

    4. Pub/Sub против Streams: что выбрать

      Pub/Sub против Streams в Redis: fire-and-forget без истории против надёжного журнала с переигрыванием, группами потребителей и подтверждениями — когда какой механизм.

  9. 9 Паттерны Redis: блокировки, лимиты, рейтинги

    1. Распределённые блокировки

      Распределённая блокировка на Redis: SET NX EX как простой лок, зачем уникальный токен, снятие через Lua, проблемы одиночного лока, Redlock и когда лок реально нужен.

    2. Ограничение частоты (rate limiting)

      Rate limiting на Redis: счётчик с TTL для фиксированного окна, скользящее окно по логу меток и token bucket. Python-иллюстрации алгоритмов и сравнение их свойств.

    3. Рейтинги и таблицы лидеров на sorted sets

      Таблицы лидеров на Redis sorted sets: ZADD для очков, ZREVRANGE для топа, ZREVRANK для ранга игрока, выборка по диапазону очков и рейтинг в реальном времени.

    4. Сессии и кэш-паттерны

      Сессии и кэш в Redis: хранение сессий с TTL и скользящим окном, паттерны cache-aside и write-through, инвалидация и защита от cache stampede блокировкой и джиттером.

  10. 10 Масштабирование и внутреннее устройство

    1. Репликация и Sentinel: высокая доступность

      Репликация Redis: роли primary и replica, асинхронная репликация, REPLICAOF. Sentinel следит за мастером, проводит автоматический failover и сообщает клиенту адрес нового мастера.

    2. Redis Cluster: шардирование

      Redis Cluster: 16384 хэш-слота, распределение ключей по узлам через CRC16, перенаправление MOVED/ASK, hash tags для совместного размещения ключей и ограничения мультиключевых операций.

    3. Память и политики вытеснения

      Управление памятью Redis: maxmemory и политики вытеснения noeviction, allkeys-lru, volatile-ttl, allkeys-lfu и другие. Как Redis выбирает что удалить, с иллюстрацией LRU на Python.

    4. Безопасность и мониторинг

      Защита и наблюдаемость Redis: ACL и пользователи, ограничение опасных команд через rename-command, мониторинг через INFO, SLOWLOG и LATENCY, бенчмарк redis-benchmark и типичные узкие места.