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 →