Redis

Redis — это размещаемая в памяти база данных ключ-значение, используемая также как распределённый кэш и брокер сообщений с опциональной поддержкой устойчивости[7]. Благодаря хранению данных в оперативной памяти и особенностям архитектуры, Redis обеспечивает низкую задержку при чтении и записи, что делает её особенно подходящей для задач кэширования. Redis является самой популярной NoSQL базой данных[8][9][10] и одной из самых популярных баз данных в целом[11].

Проект был разработан и поддерживался Сальваторе Санфилиппо (Salvatore Sanfilippo) с 2009 года[12]. С 2015 по 2020 год он возглавлял основную команду разработки проекта при поддержке компании Redis Ltd[13]. В 2020 году Санфилиппо покинул проект[14], но в ноябре 2024 года вернулся в компанию[15]. В 2021 году компания Redis Labs сменила название на Redis[16].

В 2018 году некоторые модули Redis перешли на модифицированную лицензию Apache 2.0 с добавлением Commons Clause[17]. В марте 2024 года основная часть Redis сменила прежнюю лицензию BSD-3 на двойное лицензирование под Redis Source Available License v2 (RSALv2) и SSPLv1[5]. В мае 2025 года, после возвращения в проект Санфилиппо, компания объявила о добавлении лицензии AGPLv3 в качестве третьей опции, начиная с версии 8.0, что было представлено как возвращение к модели с открытым исходным кодом[15][18]. Исходный код проекта доступен на GitHub[19]; последняя стабильная версия — 8.2.3[20].

Общие сведения
Redis
Тип хранилище структур данных, база данных «ключ—значение»
Автор Сальваторе Санфилиппо[1][2]
Разработчик Redis[1][2]
Написана на C
Интерфейс Интерфейс командной строки
Операционная система Unix-подобные[3]
Языки интерфейса английский
Первый выпуск 26 февраля 2009[4]
Аппаратные платформы x86-64, ARM, Power Systems
Последняя версия 8.2.3
Тестовая версия 8.3.x
Репозиторий github.com/redis/redis
Состояние активное
Лицензия Redis Source Available License, SSPL[5], или AGPL[6]
Сайт redis.io

История

undefined

Название «Redis» расшифровывается как Remote Dictionary Server[21]. Проект начался в 2009 году, когда Сальваторе Санфилиппо (псевдоним Antirez) пытался повысить масштабируемость собственного стартапа, разрабатывая анализатор веб-журналов в реальном времени. Столкнувшись с ограничениями традиционных СУБД, он создал прототип Redis на языке Tcl[22]. Позднее он переписал прототип на C и реализовал первый тип данных — список. После успешного использования внутри компании Санфилиппо опубликовал исходный код на Hacker News. Первые пользователи были из сообщества Ruby, среди которых были GitHub и Instagram[23][24].

В марте 2010 года Санфилиппо был приглашён в компанию VMware[25][26].[27]

В мае 2013 года Redis стала спонсироваться Pivotal Software (дочерней компанией VMware)[28].

В июне 2015 года разработка перешла под спонсорство Redis Ltd[29]..

В августе 2018 года, чтобы ограничить использование ПО облачными провайдерами без компенсации, компания Redis Ltd. перевела дополнительные модули с лицензии AGPL на Apache License с дополнением Commons Clause, ограничивающим коммерческое применение. Эти модули стали исходно-открытыми, но перестали быть свободными. Основной код оставался под BSD-лицензией[30].[31]

В октябре 2018 года была выпущена версия Redis 5.0 с поддержкой структуры данных Stream[32].

В феврале 2019 года вместо Commons Clause была внедрена собственная лицензия Redis Source Available License (RSAL), прямо запрещавшая коммерческое использование модулей как части других СУБД, поисковых и ML/AI-движков[33][34]. Последние редакции под свободной лицензией были форкнуты в проект GoodFORM[35].

В июне 2020 года Санфилиппо покинул пост мейнтейнера, его сменили Йосси Готлиб и Оран Агре[36].

В марте 2024 года Redis Ltd. объявила о переводе базового продукта с лицензии BSD на двойное лицензирование под RSALv2 и SSPLv1, начиная с версии 7.4[37]. Этот шаг вызвал критику в сообществе, и Linux Foundation объявил о создании форка Valkey на базе последней BSD-версии[38][39].

В ноябре 2024 года в компанию вернулся её создатель Сальваторе Санфилиппо. Вскоре после этого, в мае 2025 года, Redis Ltd. объявила о добавлении лицензии AGPLv3 в качестве третьей опции, начиная с версии 8.0. Этот шаг был представлен как возвращение к модели с открытым исходным кодом, одобренной OSI.

В октябре 2025 года было объявлено об устранении критической уязвимости RediShell (CVE-2025-49844), позволявшей удалённо выполнять код и существовавшей в кодовой базе около 13 лет[40][41]. В том же месяце Redis приобрела компанию Featureform, специализирующуюся на программном обеспечении для бизнеса[42].

Разработка и версионирование

По состоянию на 2025 год Redis находится в состоянии активной разработки и поддержки, регулярно выпускаются обновления и исправления безопасности[43]. Примером является оперативное устранение критической уязвимости RediShell (CVE-2025-49844) в октябре 2025 года. Проект придерживается чёткой политики поддержки: последняя стабильная версия получает полную поддержку, в то время как предыдущая минорная и предыдущая стабильная мажорная версии поддерживаются только выпуском исправлений для критических ошибок и уязвимостей[43].

В Redis принята схема версионирования, при которой стабильные выпуски имеют чётный младший номер версии (например, 8.0, 8.2), а нестабильные (тестовые) — нечётный[44]. Разработка новых функций ведётся в специальной ветке репозитория под названием «unstable», которая постоянно обновляется[45]. Например, разработка для будущего стабильного релиза 8.4 ведётся в ветке с версиями 8.3.x[44].

В проекте отсутствуют формальные «альфа» или «бета»-версии[46]. Когда функциональность для новой версии готова, для стабилизации кода выпускается один или несколько релиз-кандидатов (Release Candidate, RC). После исправления в них критических ошибок выпускается стабильная версия[46]. Так, стабильной версии Redis 8.2, вышедшей в августе 2025 года, предшествовал выпуск релиз-кандидата 8.2-RC1 в июле того же года[47]. По состоянию на ноябрь 2025 года активных кандидатов на релиз для будущих версий не было анонсировано[44].

Отличия от других СУБД

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

В отличие от традиционных СУБД, Redis представляет собой сервер структур данных и не использует программный движок хранения, подобный InnoDB или MyISAM[48][49]. Команды пользователя не формируют запрос, а описывают операции над заранее определёнными абстрактными типами данных, такими как строки, списки и хеш-таблицы[49]. Данные должны быть организованы для быстрого прямого доступа, так как извлечение не поддерживается за счёт индексов, агрегаций и других функций реляционных СУБД. В реализации Redis активно используется системный вызов fork для копирования процесса, чтобы основной процесс продолжал обслуживать клиентов, а дочерний сохранял данные на диск.

При этом в коммерческой версии Redis Enterprise для реализации функции автоматического многоуровневого хранения (Auto Tiering), позволяющей работать с объёмами данных, превышающими оперативную память, используются сторонние движки. Начиная с версии 7.2.4, по умолчанию применяется Speedb, тогда как в более ранних версиях использовался RocksDB[50]. Эти движки являются частью специфической функции корпоративной версии и не относятся к архитектуре open-source версии Redis[50].

Популярность

Согласно ежемесячным рейтингам DB-Engines, Redis является самой популярной базой данных в категории «ключ-значение»[51]. В общем рейтинге СУБД по состоянию на январь 2025 года Redis занимала 7-е место[52]. Redis также занимает 4-е место среди NoSQL-баз по удовлетворённости и рыночной доле по опросам пользователей[53], является самой популярной NoSQL-базой в контейнерах[54], и заняла 4-е место среди хранилищ по версии stackshare.io в 2019 году[55].

По результатам опроса Stack Overflow, с 2017 по 2021 годы Redis лидировала в категории «самая любимая база данных» среди разработчиков[56]. Однако к 2024 году Redis переместился на шестое место[57], но в опросе 2025 года поднялся на пятое место, показав рост использования на 8 процентных пунктов — его использовали около 28 % профессиональных разработчиков[58][59].

Возможности

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

  • Строки (Strings) — базовый тип, способный хранить любые данные (текст, сериализованные объекты) размером до 512 МБ.
  • Списки (Lists) — упорядоченные коллекции строк, отсортированные в порядке их вставки.
  • Множества (Sets) — неупорядоченные коллекции уникальных строк.
  • Упорядоченные множества (Sorted Sets) — множества, где каждый элемент имеет числовой вес (score), по которому коллекция отсортирована.
  • Хеши (Hashes) — структуры для хранения наборов пар «поле-значение»[60].
  • Документы JSON — нативная поддержка JSON-документов[60].
  • Потоки (Streams) — структура данных в виде журнала, куда можно только добавлять записи.
  • Геопространственные индексы (Geospatial) — для хранения координат и выполнения запросов по радиусу[60].
  • Битовые карты (Bitmaps) и Битовые поля (Bitfields) — для выполнения побитовых операций над строками[61].
  • HyperLogLog — вероятностная структура для подсчёта уникальных элементов с минимальным использованием памяти[61].
  • Векторные множества (Vector sets) — для хранения и поиска векторных представлений в задачах машинного обучения[62].

Модуль Redis Query Engine позволяет использовать Redis как документоориентированную базу, векторную базу данных, для вторичных индексов и как поисковой движок. Пользователь может создавать индексы для хешей и JSON-документов, использовать развитый язык запросов для векторного поиска, полнотекстовых, геопространственных запросов и агрегаций[63]. Начиная с версии 8.2, для векторного поиска был добавлен новый тип индекса SVS-VAMANA, который поддерживает сжатие векторов для снижения потребления памяти и ускорения поиска.

Версия 8.2, выпущенная в августе 2025 года, также расширила возможности работы с существующими структурами данных[64]:

  • Для Streams были добавлены команды XDELEX (удаление записей с расширенными опциями) и XACKDEL (атомарное подтверждение и удаление записи).
  • Для Bitmaps команда BITOP получила новые логические операторы: DIFF, DIFF1, ANDOR и ONE, что позволяет выполнять более сложные битовые манипуляции.

Технология Pub/Sub реализует обмен сообщениями: издатели отправляют сообщения в канал, подписчики получают их из этого же канала[65].

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

Возможна загрузка и запуск Lua-скриптов непосредственно на сервере[67].

Начиная с версии 8.0 (с 1 мая 2025 года), все типы данных входят в единый пакет[68] и доступны по лицензии Redis Source Available v2[69]. Ранее некоторые типы распространялись отдельно и лицензировались иначе.

Интерфейсы

Основным инструментом для взаимодействия с Redis является redis-cli — официальный интерфейс командной строки[70]. Он поставляется вместе с сервером Redis и позволяет отправлять команды и получать ответы напрямую из терминала. Утилита поддерживает два режима работы: интерактивный (REPL), в котором пользователь вводит команды в реальном времени, и режим выполнения команд, когда они передаются как аргументы, что удобно для автоматизации и написания скриптов[70][71]. redis-cli используется для управления данными, мониторинга производительности и отладки[71]. Он доступен на платформах Linux, macOS и Windows (через подсистему Windows для Linux)[72].

Помимо командной строки, существует множество графических интерфейсов (GUI), которые предоставляют визуальный способ взаимодействия с базами данных Redis[73]. Такие инструменты полезны для просмотра и изменения данных, мониторинга и управления конфигурациями без необходимости запоминать команды[73]. К наиболее популярным относятся:

  • Redis Insight — официальный графический инструмент от Redis, поддерживающий в том числе модули Redis[74].
  • Another Redis Desktop Manager — кроссплатформенное приложение для Windows, macOS и Linux[75].
  • Medis — современный GUI, разработанный для macOS[76].
  • Другие инструменты, такие как Redis Commander, P3X Redis UI и QuickRedis[75].

Поддерживаемые платформы

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

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

  • x86-64 — наиболее распространённая архитектура для запуска Redis в производственной среде на серверах с процессорами Intel и AMD[77].
  • ARM — официально поддерживается, начиная с версии 4.0[78]. Поддержка включает как мощные серверные процессоры (например, AWS Graviton, Google Axion, Microsoft Cobalt), так и маломощные устройства, такие как Raspberry Pi, что делает Redis подходящим для IoT-решений[78][79].
  • Power Systems — Redis может работать на серверах с архитектурой IBM POWER, в частности на POWER8. Производительность на этой платформе была оптимизирована в рамках партнёрства с IBM[77].

Операционные системы Redis официально поддерживается и тестируется на Unix-подобных операционных системах:

  • Linux — является основной и наиболее рекомендуемой платформой для развёртывания в производственной среде. Поддерживаются различные дистрибутивы, такие как Ubuntu, Debian, CentOS и Red Hat Enterprise Linux[80].
  • macOS — поддерживается для целей разработки[80].

Официальная поддержка для Windows отсутствует[81]. Однако запуск возможен несколькими способами:

  • WSL — рекомендуемый способ, позволяющий запустить полноценную среду Linux и Redis внутри Windows 10 или 11[82].
  • Docker — запуск Redis в контейнере на Windows[83].
  • Memurai — стороннее решение от партнёра Redis, предоставляющее нативную поддержку для Windows[82].

Устойчивость

Redis хранит все данные в памяти. До версии 2.4 поддерживалась так называемая виртуальная память[84], позволявшая размещать часть данных на диске, но данный механизм устарел. Устойчивость обеспечивается двумя способами: создание снимков (snapshotting) — асинхронная периодическая запись дампа в двоичном формате RDB; или через журналирование (append-only file, AOF) — запись всех изменяющих данных операций в отдельный файл в фоновом режиме. Для ограничения размера журнального файла Redis может переписывать его в фоне. Журналирование реализовано с версии 1.1 и считается наиболее надёжным вариантом[85].

Механизмы персистентности получили развитие в последующих версиях. Начиная с версии 4.0 (2017 год), был представлен гибридный формат RDB-AOF: при перезаписи файла AOF в его начале создаётся снимок в формате RDB, а новые команды дописываются в конец. Такой подход значительно ускоряет восстановление данных по сравнению с использованием чистого AOF, сохраняя при этом высокую надёжность[86]. В версии 7.0 (2022 год) механизм AOF был усовершенствован: вместо одного файла журнал операций стал сохраняться в виде нескольких файлов в отдельном каталоге[87]. Для более точного контроля над долговечностью данных в версии 7.2 (2023 год) была добавлена команда `WAITAOF`, позволяющая клиенту дождаться синхронизации операций записи с диском на заданном числе реплик[88].

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

Репликация

Redis поддерживает репликацию master-реплика. Данные любого сервера могут реплицироваться на неограниченное число реплик; каждая реплика может стать мастером для других. Поддерживается древовидная репликация. Реплики могут принимать записи, что допускает контролируемую (или случайную) неконсистентность. Реализована полная поддержка Pub/Sub: клиент реплики может подписаться на канал и получать все сообщения, опубликованные на любом уровне дерева[89]. Репликация предназначена для масштабирования на чтение и резервирования данных.

Механизм репликации со временем совершенствовался. В версии 4.0 (2017 год) был представлен улучшенный протокол частичной синхронизации PSYNC2. Он позволил репликам после перезапуска продолжать синхронизацию с основным узлом без полной пересылки всех данных при определённых условиях, так как необходимые метаданные о репликации стали сохраняться в RDB-файле[90][91]. В версии 7.2 (2023 год) была добавлена поддержка SNI для репликации на основе TLS, что повысило безопасность в защищённых средах[92].

Наиболее значительное изменение было внесено в Redis 8.0 (2024 год) с появлением механизма «RDB channel replication». Он повысил производительность и надёжность полной синхронизации за счёт одновременного запуска двух потоков: один передаёт снимок базы данных (RDB), а второй — непрерывный поток команд, поступающих на основной узел во время синхронизации[93][94]. Такой подход позволил ускорить полную синхронизацию набора данных объёмом 10 ГБ на 18 % и сократить пиковую нагрузку на память буфера репликации на 35 %[93]. Кроме того, была улучшена отказоустойчивость: при кратковременных сбоях чтения данных во время синхронизации система выполняет повторные попытки, что позволяет избежать ненужных отключений реплик[94].

Производительность

Если устойчивость не требуется, благодаря размещению данных в памяти Redis превосходит по скорости традиционные СУБД, которые фиксируют каждую операцию через запись на диск. Redis работает как однопроцессное приложение и однопоточно (или двупоточно при переписывании журнала AOF). Поэтому один экземпляр Redis не может распараллелить задачи вроде хранимых процедур[95].

Версия 8.2, выпущенная в августе 2025 года, принесла значительные улучшения производительности. Благодаря оптимизации более 70 команд задержка при их выполнении была снижена до 35 %[96], а пропускная способность увеличена до 49 %, что позволяет одному экземпляру обрабатывать свыше 1 миллиона операций в секунду[97]. Кроме того, изменение внутреннего метода хранения ключей и JSON-значений позволило сократить использование памяти до 67 % для определённых типов нагрузок[96].

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

Кластеризация Redis появилась в апреле 2015 года (версия 3.0)[98]. В режиме кластера поддерживаются все одноключевые команды; операции с несколькими ключами (объединение, пересечение) разрешены только для ключей на одном узле, а смена базы данных недоступна[99]. Кластер масштабируется до 1000 узлов, обеспечивает приемлемую защищённость записей и продолжает работать при сбое части узлов[100][101].

В последующих версиях функциональность кластера была расширена. В версии 7.0 (2022 год) была добавлена поддержка шардированного механизма Pub/Sub[102]. Это позволило снизить сетевой трафик в крупных кластерах, поскольку сообщения распространяются в пределах шарда, а не транслируются на все узлы. Для улучшения мониторинга в версии 8.2 (2025 год) была введена команда `CLUSTER SLOT-STATS`, предоставляющая детальную статистику по каждому слоту, включая количество ключей.

Сценарии использования

Redis применяется для кэширования сессий, полной блоковой кэширования веб-страниц, систем обмена сообщениями, расчёта лидербордов, счётчиков и других задач[103]. Механизм Pub/Sub обеспечивает обмен сообщениями в реальном времени между серверами.

Ведущие облачные провайдеры предоставляют Redis как управляемый сервис, однако в 2023—2025 годах в их предложениях произошли значительные изменения:

  • Microsoft Azure: В ноябре 2024 года Microsoft в партнёрстве с Redis представила сервис нового поколения Azure Managed Redis (стал общедоступным в мае 2025 года)[104][105]. Он предоставляет доступ к последним версиям Redis и корпоративным функциям, таким как векторный поиск. Одновременно был объявлен план по прекращению поддержки старого сервиса Azure Cache for Redis в период с 2026 по 2028 год, с рекомендацией миграции на новый продукт[106]. Поддержка Redis версии 4 в старом сервисе была прекращена 30 июня 2023 года[107].
  • Amazon Web Services: После изменения лицензионной политики Redis, AWS сделала ставку на его форк Valkey. В октябре 2024 года был запущен сервис Amazon ElastiCache for Valkey[108]. Он позиционируется как полная замена ElastiCache for Redis с более низкой стоимостью и возможностью бесшовной миграции[109]. В июле 2025 года сервис был обновлён до версии 8.1, получив поддержку векторного поиска и расширенную работу с JSON[110].
  • Google Cloud: Основным предложением является сервис Memorystore for Redis Cluster, ставший общедоступным в ноябре 2023 года[111]. Сервис предлагает горизонтально масштабируемую архитектуру и высокую доступность[112]. В апреле 2024 года была добавлена поддержка персистентности данных (RDB и AOF) и векторного поиска для приложений на базе ИИ[111].
  • Alibaba Cloud: 27 сентября 2024 года компания провела ребрендинг, объединив сервисы ApsaraDB for Redis и Tair в единый продукт под названием Tair (Redis OSS-compatible)[113]. Существующие экземпляры продолжают работать и поддерживаться в рамках нового бренда[113].

Пользователи

Redis используется такими компаниями, как Twitter, Airbnb, Tinder[114], Yahoo!, Adobe, Hulu[115], Amazon[116] и OpenAI[117].

В октябре 2024 года была запущена программа «Redis for Startups» для поддержки молодых технологических компаний[118]. В рамках этой инициативы об использовании Redis заявили несколько инновационных стартапов, особенно в сфере искусственного интеллекта. Например, компания Relevance AI применяет Redis для создания и автоматизации работы ИИ-агентов, сократив время отклика с двух секунд до десяти миллисекунд благодаря векторному поиску[119]. Стартап Superlinked использует Redis Cloud для обработки векторных представлений в системах рекомендаций и персонализированного поиска в реальном времени[120][121]. Также сообщалось о сотрудничестве с различными правительственными ведомствами Индии[122].

Примечания