System Design Space
Граф знанийНастройки

Обновлено: 24 июня 2026 г. в 15:37

Redis: база данных в памяти и архитектура

средний

База данных в памяти для кэша, сессий, счётчиков и быстрых очередей: цикл событий, структуры данных, RDB/AOF, репликация, Sentinel и Redis Cluster.

Redis кажется безобидным ускорителем ровно до того момента, пока в него не начинают складывать состояние, от которого зависит корректность бизнеса. Эта глава как раз помогает провести эту границу.

В реальных системах она полезна тем, что заставляет разделять быстрый слой доступа и надёжный источник истины, а также думать о ключах, структурах данных, времени жизни и сохранении на диск как о части архитектуры.

В интервью и инженерных обсуждениях этот материал особенно силен там, где нужно показать, что Redis решает конкретную проблему задержек и нагрузки, но не обязан автоматически становиться сердцем системы.

Практическая польза главы

Ускорение горячего пути

Выделяйте участки с жёсткими требованиями к задержке в Redis, сохраняя основную систему хранения отдельно для надёжной долговечности данных.

Структуры данных

Подбирайте дизайн ключей и структуры Redis: строки, хеши, упорядоченные множества и потоки под профиль доступа и политику времени жизни.

Надёжность и ограничения

Явно учитывайте компромиссы RDB/AOF, политику вытеснения, давление на RAM и поведение кластера при резервном переключении.

Компромиссы на интервью

Показывайте, где Redis решает проблему, а где опасно превращать его в единственный источник истины.

Рамка выбора и редакторский фокус

Фокус главы

архитектуре Redis в памяти, сценариях с низкой задержкой и эксплуатационных ограничениях

Профиль нагрузки

Смотрите на критичный пользовательский путь: транзакции, чтения по ключу, индексы, задержку 95-го и 99-го перцентилей и восстановление после отказа.

Когда выбирать

Глава должна отвечать, почему этот движок хорош именно для операционного контура, транзакционной обработки OLTP, кэша или модели с преобладанием записи.

Граница и риск

Нельзя обещать универсальность: каждая СУБД имеет цену в консистентности, миграциях, памяти, индексах или операционной дисциплине.

Связать дальше

Сравнивайте с фреймворком выбора СУБД, репликацией/шардингом и соседними операционными движками.

Источник

Wikipedia: Redis

История Redis, архитектурные особенности и место базы данных в памяти в современных системах.

Открыть статью

Официальный сайт

Redis

Официальная документация по структурам данных, сохранению на диск, репликации, Sentinel и Redis Cluster.

Открыть сайт

Redis обычно используется как быстрое : она держит горячие данные рядом с приложением, снижает и помогает выдерживать высокую .

Архитектурно Redis важно оценивать через ключей, , , , и , а не только через скорость отдельных команд.

В продуктовой системе Redis часто связывает , , , и , который обычно остаётся в более долговечном хранилище.

Redis — база данных в памяти с богатым набором структур данных и очень низкой задержкой. В системном дизайне его редко берут как основное хранилище: чаще это отдельный быстрый слой рядом с приложением — кэш, сессии, счётчики, очереди, потоки (Streams) и прикладные примитивы с состоянием, которые держат нагрузку, когда основная база уже не успевает.

История и контекст

2009

Первый публичный релиз

Redis появляется как открытое хранилище типа «ключ-значение» в памяти с фокусом на очень низкую задержку.

2010-е

Расширение моделей данных и сценариев

Помимо простого кэша, Redis начинают использовать для ограничения частоты запросов, очередей, таблиц лидеров и хранения сессий.

2013-2016

Высокая доступность и масштабирование

Репликация, Redis Sentinel и Redis Cluster формируют практический подход к высокой доступности, переключению на резерв и шардированию.

2020+

Облачная эксплуатация

Управляемые Redis-сервисы становятся стандартом для многих команд: акцент смещается на целевые уровни сервиса, наблюдаемость и стоимость RAM.

Март 2024

Смена лицензии: RSALv2 и SSPLv1

Начиная с Redis 7.4 код переходит с BSD-3 на двойную лицензию RSALv2/SSPLv1: исходники остаются доступными, но проект перестаёт быть открытым по определению OSI.

2024

Форк Valkey под эгидой Linux Foundation

Linux Foundation запускает Valkey — форк Redis 7.2.4 под BSD-3 при поддержке AWS, Google Cloud, Oracle и других; управляемые сервисы AWS (ElastiCache, MemoryDB) и Google Cloud (Memorystore) добавляют Valkey.

Май 2025

Redis 8: возврат к открытой лицензии

Redis 8 добавляет AGPLv3 как третий вариант лицензии рядом с RSALv2/SSPLv1, переносит возможности Redis Stack (JSON, временные ряды, вероятностные структуры, поисковый движок) в ядро и вводит новый тип данных — векторные наборы.

Ключевые архитектурные элементы

Цикл событий и атомарные команды

Команды идут через один последовательный цикл событий. Это убирает гонки в одном инстансе и держит время отклика предсказуемым, но тяжёлая команда блокирует всех остальных.

Структуры данных в памяти

String, Hash, List, Set, Sorted Set и Stream закрывают широкий спектр задач прямо в памяти, без планировщика запросов — расплата в том, что весь рабочий набор должен умещаться в оперативной памяти (RAM).

Сохранение данных: снимки RDB и журнал AOF

Долговечность — это выбор, а не данность: снимок RDB дешевле, но теряет последние секунды, журнал AOF надёжнее, но дороже по записи; комбинация ищет середину.

Репликация и кластер

Высокая доступность и горизонтальное масштабирование держатся на топологии «ведущий узел и реплики», Sentinel для переключения на резерв и шардировании по хеш-слотам в Redis Cluster.

Структуры данных Redis: почему это больше, чем ключ-значение

Redis хранит не просто строки, а типизированные структуры, и под каждую даёт свои команды. Именно поэтому им закрывают не только кэш: счётчик, очередь, таблицу лидеров можно собрать прямо на сервере, атомарно, без отдельного слоя логики в приложении.

Структуры данных Redis: больше, чем ключ-значение

В Redis ключ ссылается не просто на строку, а на типизированную структуру в памяти со специализированными атомарными командами.

Почему Redis — это не "просто ключ-значение"

  • Значение в Redis имеет тип (String/Hash/List/Set/ZSET/Stream), а не является непрозрачным blob.
  • Операции выполняются на стороне сервера атомарно, что снижает число сетевых переходов и упрощает конкурентный доступ.
  • Каждый тип даёт прикладные примитивы: таблицы лидеров, очереди, счётчики, ленты событий и приближённую аналитику.
  • Структуры данных, TTL, сохранение на диск и репликация формируют полноценный быстрый слой данных.

String

Универсальный тип для кэша, счётчиков, флагов и небольших JSON-документов.

Ключевые команды

GET/SETINCR/DECRMGET/MSETEXPIRE

Типичные сценарии

  • ленивое заполнение кэша
  • токен сессии
  • атомарные счётчики

Пример

SET user:1001:profile '{"name":"Alice"}' EX 300
INCR page:home:views

Архитектура Redis в продуктовой системе

Ниже показан общий контур Redis в продуктовой системе: клиентский слой, путь выполнения команд, модель данных в памяти, сохранение на диск и механика кластера с резервным переключением.

Клиенты и протокол
RESP2/RESP3redis-cliклиентские библиотекиTLS + ACL
переход слоя
Обработка команд
цикл событийатомарные командыпакетированиеLua / Functions
переход слоя
Модель данных в памяти
String/HashList/Set/ZSETStreamsвероятностные структуры
переход слоя
Сохранение на диск
снимки RDBAOFполитика appendfsyncперезапись AOF
переход слоя
Репликация и резервное переключение
ведущий узел/репликаPSYNCSentinelпереключение на резерв
переход слоя
Операции кластера
хеш-слотыребалансировкаполитика вытеснениямониторинг

Системный контур

Redis обычно ставят как быстрый слой в памяти рядом с долговечным транзакционным хранилищем: он ускоряет горячие чтения и записи, но не отменяет отдельную стратегию сохранения данных.

Профиль задержки

чтение/запись < 1 мсдоступ из памятипакетирование команд

Сценарии системного дизайна

кэш и сессииограничение запросовтаблицы лидеров и счётчики

Эксплуатационные компромиссы

стоимость RAMнастройка вытесненияотставание реплик

Путь чтения и записи через компоненты

Диаграмма объединяет путь записи и путь чтения с пояснениями: как Redis-команды маршрутизируются, исполняются и подтверждаются в одиночном инстансе и в кластере.

Разбор пути чтения и записи

Интерактивный разбор прохождения Redis-команд через компоненты инстанса/кластера.

1
Команда клиента
SET HSET XADD
2
Маршрутизация
владелец слота
3
Выполнение команды
цикл событий
4
Сохранение и реплика
AOF/RDB + PSYNC
5
Ответ и видимость
состояние ведущего узла
Путь записи: команда маршрутизируется на узел-владелец, меняет состояние в памяти и подтверждается с учётом репликации и сохранения на диск.

Путь записи

  1. Приложение отправляет команду записи (`SET`, `HSET`, `XADD`) на узел Redis.
  2. В кластере команда идёт на ведущий узел-владелец хеш-слота; операции между слотами требуют дисциплины в дизайне ключей.
  3. Ведущий узел применяет изменение в RAM и асинхронно реплицирует его на реплики через PSYNC.
  4. Сохранение на диск настраивается через RDB/AOF; баланс задержки и надёжности зависит от `appendfsync` и политики записи.

Когда Redis подходит, а когда мешает

Хорошо подходит

  • Кэш горячих данных и ответов API, когда задержка должна укладываться в доли миллисекунды.
  • Хранилище сессий, ограничитель частоты запросов, распределённые счётчики и таблицы лидеров.
  • События в реальном времени и лёгкие очереди — через каналы модели публикации/подписки (pub/sub) и потоки (Streams).
  • Простая модель доступа, где скорость важнее произвольных исследовательских запросов.

Стоит избегать

  • Единственный источник истины для критичных бизнес-данных, если не продумана стратегия сохранения на диск — при сбое легко потерять то, что было только в памяти.
  • Сложная аналитика и произвольные запросы со связыванием таблиц (join) по большим наборам данных.
  • Нагрузка, где объём активных данных заметно превышает оперативную память (RAM): вытеснение начинает выбрасывать нужное.
  • Команда не готова управлять политикой вытеснения, отставанием репликации и резервным копированием с восстановлением.

Практика: команды для схемы и данных

Ниже практические команды Redis: операции для пространства ключей и конфигурации, а также команды чтения и записи данных.

Примеры команд для схемы и данных в Redis

В Redis нет классического SQL DDL, но есть команды для пространства ключей, сохранения данных и политик доступа.

Структурный слой Redis обычно описывает настройки сохранения данных, ACL и подготовку служебных структур, например групп потребителей.

Настройка сохранения данных и политики памяти

CONFIG SET

Определяем поведение AOF и вытеснение записей при ограничении RAM.

CONFIG SET appendonly yes
CONFIG SET appendfsync everysec
CONFIG SET maxmemory 4gb
CONFIG SET maxmemory-policy allkeys-lru

Подготовка потока: группа потребителей

XGROUP CREATE

Создаём поток и группу потребителей как структурную основу для обработки событий.

XGROUP CREATE orders:events order-service 0 MKSTREAM

ACL-профиль для пользователя приложения

ACL SETUSER

Ограничиваем доступ приложения по пространству имён и группам команд.

ACL SETUSER app on >S3cr3t
~app:*
+@read +@write
-FLUSHALL

Связанные главы

  • Фреймворк выбора СУБД - Помогает понять, когда Redis нужен как отдельный слой с низкой задержкой, а когда лучше выбрать другой тип базы данных.
  • Стратегии кэширования: Cache-Aside, Read-Through, Write-Through, Write-Back - Паттерны кэширования и компромиссы по консистентности и задержке, где Redis часто выступает серверной частью кэша.
  • Репликация и шардинг - Практика высокой доступности и масштабирования: отставание реплик, резервное переключение, ключ шардирования и операционные риски кластера.
  • Key-Value Database - Кейс проектирования распределённой системы «ключ-значение» и сравнение её принципов с использованием Redis в рабочей среде.
  • Введение в хранение данных - Как сочетать слой в памяти с долговечным хранилищем и явно согласовывать это с требованиями API и консистентности.
  • CAP теорема - Теорема CAP задаёт рамку компромисса: как только Redis становится распределённым слоём, между доступностью и консистентностью приходится выбирать.

Чтобы отмечать прохождение, включи трекинг в Настройки