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

Redict

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

История

Предпосылки создания

Redis (Remote Dictionary Server) изначально разрабатывался как свободное программное обеспечение под лицензией BSD. На протяжении многих лет он оставался одной из самых популярных in-memory баз данных, используемой для кэширования, управления сессиями, очередей сообщений и в качестве брокера сообщений. В 2018 году разработка Redis перешла под контроль компании Redis Labs (позднее переименованной в Redis Inc.), которая начала постепенно ужесточать лицензионные условия для облачных провайдеров.

Смена лицензии Redis

В марте 2024 года компания Redis Inc. объявила о переходе на новую лицензию — Redis Source Available License (RSALv2) и Server Side Public License (SSPLv1). Эти лицензии не являются открытыми в понимании Open Source Initiative (OSI) и накладывают ограничения на коммерческое использование, особенно для облачных сервисов, предоставляющих базу данных как услугу (DBaaS). Данное решение вызвало критику в сообществе разработчиков, поскольку фактически лишало проект статуса полностью свободного ПО.

Создание форка Redict

В ответ на изменение лицензии Redis, 27 марта 2024 года разработчик Дрю Дево (Drew DeVault) объявил о создании форка Redict. Проект базируется на последней версии Redis, выпущенной под лицензией BSD (версия 7.2.4), и перелицензирован под LGPLv3. Основными задачами форка стали:

  • Сохранение полностью свободной лицензии, совместимой с требованиями OSI.
  • Независимость от коммерческих интересов одной компании.
  • Обеспечение долгосрочной поддержки и развития для сообщества.
  • Сохранение обратной совместимости с протоколом и API Redis.

Развитие проекта

Redict быстро привлёк внимание сообщества, особенно среди сторонников свободного ПО. Проект получил поддержку от таких организаций, как Software Freedom Conservancy (SFC) — некоммерческая организация, занимающаяся защитой свободного программного обеспечения. Redict стал частью экосистемы SFC, что гарантирует его независимость и юридическую защиту. Разработка ведётся на платформе Codeberg, а исходный код доступен для всех желающих. Первый стабильный релиз Redict 7.3.0 был выпущен в мае 2024 года.

Лицензирование и правовой статус

Redict распространяется под лицензией GNU Lesser General Public License версии 3 (LGPLv3). Это одна из самых строгих свободных лицензий, которая:

  • Гарантирует право на использование, изучение, изменение и распространение программы.
  • Требует, чтобы любые модифицированные версии также распространялись под LGPLv3.
  • Позволяет использовать библиотеку в проприетарных программах при условии, что изменения в самой библиотеке остаются открытыми.

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

Архитектура и функциональность

Основные принципы

Redict, как и Redis, является сервером структур данных, работающим в оперативной памяти. Это означает, что все данные хранятся в RAM, что обеспечивает чрезвычайно высокую скорость чтения и записи (микросекунды). Для сохранения данных на диск используются механизмы снимков (RDB) и журналов (AOF). Redict поддерживает репликацию master-slave, кластеризацию (шардинг) и транзакции.

Поддерживаемые структуры данных

Redict поддерживает широкий набор структур данных, что отличает его от простых key-value хранилищ:

  • Строки (strings) — базовый тип данных, может содержать текст, числа, бинарные данные.
  • Списки (lists) — упорядоченные коллекции строк, поддерживающие операции push/pop с обоих концов.
  • Множества (sets) — неупорядоченные коллекции уникальных строк, поддерживающие операции пересечения, объединения и разности.
  • Упорядоченные множества (sorted sets) — множества с привязкой к числовому весу (score), позволяющие получать элементы по рангу.
  • Хеши (hashes) — отображение «поле-значение», удобное для представления объектов.
  • Геопространственные индексыподдержка хранения и запросов географических координат.
  • HyperLogLog — вероятностная структура для подсчёта уникальных элементов.
  • Bitmapsработа с битовыми массивами.
  • Streams — структура для работы с потоками данных, поддерживающая группы потребителей.

Протокол и совместимость

Redict полностью совместим с протоколом Redis (RESP — Redis Serialization Protocol). Это означает, что все существующие клиенты и библиотеки для Redis (например, для Python, Java, Node.js, Go, PHP) могут работать с Redict без каких-либо изменений. Команды, синтаксис и поведение идентичны Redis версии 7.2.x.

Дополнительные возможности

  • Pub/Sub — механизм публикации и подписки на сообщения.
  • Lua-скрипты — выполнение пользовательских скриптов на стороне сервера.
  • Встроенные модули — поддержка расширения функциональности через модули (например, RediSearch, RedisJSON, RedisGraph), хотя их совместимость может варьироваться.
  • ACL (Access Control Lists) — гибкая система управления доступом и правами пользователей.
  • SSL/TLS — поддержка шифрования соединений.

Применение

Redict используется в тех же сценариях, что и Redis, благодаря полной совместимости:

Кэширование

Наиболее распространённое применение. Redict хранит часто запрашиваемые данные (результаты запросов к БД, HTML-фрагменты, сессии пользователей) в оперативной памяти, что значительно ускоряет работу веб-приложений. Типичные примеры: кэширование страниц в WordPress, кэширование сессий в PHP-фреймворках (Laravel, Symfony), кэширование API-ответов.

Управление сессиями

Redict идеально подходит для хранения пользовательских сессий в распределённых системах. Благодаря высокой скорости и поддержке TTL (time-to-live), сессии могут автоматически истекать. Это используется в крупных веб-сервисах, таких как социальные сети, интернет-магазины и SaaS-платформы.

Очереди сообщений (Message Queues)

С помощью списков (list) и блокирующих операций (BLPOP, BRPOP) Redict может выступать в роли простого брокера сообщений. Это используется для асинхронной обработки задач (например, отправка email, генерация отчётов, обработка изображений). Популярные библиотеки, такие как Celery (Python) и Sidekiq (Ruby), могут использовать Redict в качестве брокера.

Аналитика и подсчёты в реальном времени

Благодаря структурам данных HyperLogLog и Bitmaps, Redict позволяет эффективно подсчитывать уникальных посетителей, активных пользователей, конверсии и другие метрики в реальном времени с минимальным потреблением памяти.

Таблицы лидеров и рейтинги

Упорядоченные множества (sorted sets) идеально подходят для создания таблиц лидеров в онлайн-играх, системах голосования или рейтинговых платформах. Элементы автоматически сортируются по весу, что позволяет быстро получать топ-N записей.

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

Redict поддерживает команды для работы с геоданными (GEOADD, GEORADIUS, GEODIST). Это позволяет создавать сервисы поиска ближайших объектов (кафе, аптеки, точки интереса) без использования внешних геоинформационных систем.

Отличия от Redis

Хотя Redict является форком и стремится к полной совместимости, существуют некоторые различия:

ХарактеристикаRedis (после 2024)Redict
ЛицензияRSALv2 / SSPLv1 (не OSI)LGPLv3 (OSI-совместимая)
УправлениеКоммерческая компания Redis Inc.Сообщество, Software Freedom Conservancy
РазработкаЗакрытая, с коммерческой ориентациейОткрытая, публичная
СовместимостьПолная с протоколом RESPПолная с протоколом RESP 2/3
Новые функцииРазрабатываются Redis Inc.Форк от 7.2.4, дальнейшее развитие сообществом
Целевая аудиторияКоммерческие пользователи, облачные провайдерыСторонники свободного ПО, сообщество

На момент написания статьи (2025 год) Redict не включает некоторые функции, добавленные в Redis после версии 7.2.4, такие как поддержка векторных баз данных (Redis Stack) и новые команды для работы с JSON. Однако сообщество Redict активно работает над их реализацией.

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

  • Отставание в функциональности: Redict основан на версии 7.2.4, в то время как Redis Inc. активно развивает новые возможности (например, поддержка AI-моделей, векторные индексы). Это может быть критично для пользователей, которым нужны самые современные функции.
  • Размер сообщества: Сообщество Redict значительно меньше, чем у Redis, что может повлиять на скорость исправления ошибок и доступность сторонних модулей.
  • Совместимость модулей: Некоторые модули Redis (например, RedisGraph, RedisTimeSeries) могут не работать с Redict из-за изменений в лицензировании или внутренних API.
  • Юридические риски: Хотя Redict лицензирован под LGPLv3, существует теоретический риск судебных исков от Redis Inc. относительно торговой марки или патентов, хотя на практике это маловероятно.

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

  • Название «Redict» является портманто слов «Redis» и «dict» (сокращение от dictionary — словарь), подчёркивая основную структуру данных.
  • Проект поддерживается исключительно на пожертвования сообщества и гранты, без какого-либо коммерческого финансирования.
  • Redict стал первым крупным форком Redis с момента его создания в 2009 году.
  • В 2024 году проект был принят в инкубатор Software Freedom Conservancy, что обеспечивает его юридическую защиту и долгосрочную поддержку.

Источники

  • DeVault, D. (2024). «Announcing Redict: a fork of Redis». Drew DeVault’s Blog.
  • Software Freedom Conservancy. (2024). «Redict Joins SFC».
  • Redis Inc. (2024). «Redis Adopts New Source Available License».
  • Официальная документация Redict (redict.io).
  • Open Source Initiative (OSI). «The Open Source Definition».
  • GitHub-репозиторий Redict (codeberg.org/redict/redict).

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →