Открыть сервисСервис

Redis

Redis — это резидентная система управления базами данных (СУБД) класса NoSQL, работающая с данными в формате «ключ-значение» (key-value store). Отличается высокой производительностью благодаря хранению всех данных в оперативной памяти (in-memory) и асинхронной периодической записью на диск для сохранения состояния. Используется как кэш, брокер сообщений, очередь задач и основное хранилище для приложений, критичных к скорости доступа.

История

Разработка Redis началась в 2009 году итальянским разработчиком Сальваторе Санфилиппо (Salvatore Sanfilippo) для улучшения производительности его стартапа по веб-аналитике. Первоначально проект назывался Redis (Remote Dictionary Server) и был реализован на языке Си. В 2010 году компания VMware (организация признана иноагентом в РФ) спонсировала разработку, наняв Санфилиппо.

В 2013 году проект перешёл под управление компании Redis Labs (позднее переименованной в Redis Inc.). Ключевые вехи развития:

  • 2011 — Redis 2.4: поддержка репликации «ведущий-ведомый» (master-slave).
  • 2015 — Redis 3.0: кластеризация (Redis Cluster) с автоматическим шардированием данных.
  • 2018 — Redis 5.0: внедрение потоков (Redis Streams) для обработки событий.
  • 2020 — Redis 6.0: поддержка аутентификации по протоколу SSL/TLS, улучшенный ACL (Access Control List).
  • 2023 — Redis 7.2: введение модулей для векторного поиска и улучшенная работа с JSON.

В 2024 году компания Redis Inc. изменила лицензию на проприетарную (RSALv2 и SSPL), что вызвало критику сообщества и появление форков, таких как Valkey (поддерживаемый Linux Foundation).

Архитектура и принципы работы

Redis построен на событийно-ориентированной модели с однопоточным циклом обработки команд (single-threaded event loop). Это позволяет избежать блокировок и обеспечивает предсказуемую задержку (latency) на уровне микросекунд. Данные хранятся в оперативной памяти, а для сохранения на диск используются два механизма:

  • RDB (Redis Database) — снапшоты (дампы) памяти в двоичном файле, создаваемые по расписанию.
  • AOF (Append Only File) — журнал операций записи, который воспроизводится при перезапуске.

Типы данных

Redis поддерживает не только простые строки, но и сложные структуры данных:

ТипОписаниеПример команды
StringБинарно-безопасная строка до 512 МБSET key value
ListУпорядоченный список строкLPUSH list value
SetНеупорядоченное множество уникальных строкSADD set member
Sorted SetМножество с числовой оценкой (score) для сортировкиZADD zset score member
HashАссоциативный массив (словарь)HSET hash field value
BitmapsМассив битов для эффективной работы с флагамиSETBIT bitmap offset value
HyperLogLogВероятностная структура для подсчёта уникальных элементовPFADD hll element
GeospatialГеопространственные индексы (широта/долгота)GEOADD geo lon lat member
StreamЛог событий с поддержкой групп потребителейXADD stream * field value

Кластеризация и репликация

  • Redis Cluster — распределённая архитектура, где данные автоматически шардируются на 16384 хэш-слота. Каждый узел отвечает за подмножество слотов. Кластер обеспечивает отказоустойчивость: при выходе из строя одного узла его слоты перераспределяются между репликами.
  • Репликация — асинхронная синхронизация данных с ведущего узла (master) на один или несколько ведомых (replica). Ведомые могут обрабатывать запросы на чтение, снижая нагрузку на ведущий.

Применение

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

Кэширование

Благодаря скорости чтения/записи (миллионы операций в секунду) Redis является стандартом для кэширования результатов запросов к базам данных, сессий пользователей, HTML-фрагментов и API-ответов. Популярные стратегии кэширования: Cache-Aside, Write-Through, Write-Behind.

Очереди задач и брокеры сообщений

Структуры List (блокирующие операции BLPOP, BRPOP) и Stream позволяют реализовывать очереди с гарантированной доставкой, группы потребителей и механизмы повторной обработки. Redis часто используется в связке с Celery, Sidekiq и Resque.

Сессии веб-приложений

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

Реалтайм-аналитика

Счётчики (INCR), битовые карты (BITCOUNT) и HyperLogLog позволяют в реальном времени подсчитывать просмотры, уникальных посетителей, активность пользователей.

Геопространственные сервисы

Команды GEORADIUS и GEODIST используются для поиска объектов поблизости (например, ближайшие магазины, точки доступа Wi-Fi).

Игры и геймификация

Лидерборды (Sorted Set), сессии игроков, временные блокировки (TTL) — типовые сценарии в игровых серверах.

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

  • Redis CLI — консольный клиент для выполнения команд.
  • RedisInsight — графический интерфейс для мониторинга и отладки.
  • Модули — расширения, добавляющие новые типы данных: RediSearch (полнотекстовый поиск), RedisJSON (работа с JSON), RedisGraph (графовые базы), RedisTimeSeries (временные ряды).
  • Клиентские библиотеки — официальные и сторонние драйверы для всех популярных языков: Python (redis-py), Java (Jedis, Lettuce), Node.js (ioredis), Go (go-redis), C# (StackExchange.Redis), PHP (Predis).

Критика и ограничения

  • Потребление памяти — все данные хранятся в RAM, что делает Redis дорогим для хранения больших объёмов (более десятков гигабайт). Для экономии памяти используются сжатие (compression) и вытеснение ключей по политикам (LRU, LFU, TTL).
  • Отсутствие сложных запросов — Redis не поддерживает SQL-подобные запросы с JOIN, агрегациями и вложенными подзапросами. Для аналитики требуется выгрузка данных в другие системы.
  • Потеря данных при сбое — при настройке только RDB возможна потеря последних изменений (до нескольких минут). AOF снижает риск, но увеличивает накладные расходы.
  • Однопоточность — хотя однопоточная модель упрощает синхронизацию, она ограничивает масштабирование на многоядерных процессорах (одна команда выполняется за раз). Для утилизации всех ядер используются кластеры и модули.

Интересные факты

  • Название Redis изначально было аббревиатурой от «REmote DIctionary Server».
  • Redis поддерживает транзакции (MULTI/EXEC) с отложенным выполнением команд, но без отката.
  • В 2021 году Redis стал самой популярной СУБД NoSQL по версии DB-Engines.
  • Команда EVAL позволяет выполнять Lua-скрипты на стороне сервера, что даёт атомарные операции.

Источники

  • Официальная документация Redis (redis.io/documentation)
  • Salvatore Sanfilippo, «Redis: The Story of a Database» (блог разработчика)
  • Redis Labs, «Architecture of Redis» (технический документ)
  • DB-Engines Ranking, «Popularity of NoSQL databases» (2021–2024)
  • Статья «Redis vs Memcached: Performance Comparison» (ACM Digital Library)
Заметили ошибку или не согласны с информацией в статье? Напишите нам support@bfometr.ru