Компания Redis Ltd объявила об изменении лицензионной политики проекта. Начиная с выпуска Redis 8.0 код проекта стал доступен под свободной лицензией AGPLv3. Переход на открытую лицензию стал возможным благодаря возвращению в компанию Сальвадора Санфилиппо, создателя СУБД Redis. После своего ухода из Redis Ltd Сальвадор разработал набор векторных расширений (Vector Sets), которые был готов передать в состав Redis, но хотел чтобы созданный им код поставлялся под открытой лицензией. Сальвадор смог убедить коллег в целесообразности восстановления открытого характера проекта и улучшения взаимодействия с сообществом.
Роуэн Троллоп, директор Redis Ltd, заявил, что совершенный в прошлом году переход на проприетарные лицензии достиг своей цели, так как компании AWS и Google основали форк, начали принимать участие в совместной разработке и делиться своими прошлыми наработками. При этом смена лицензий навредила отношениям с сообществом, которые теперь компания попытается восстановить, вернувшись к поставке кода под свободной лицензией.
После перехода на проприетарные лицензии развитие открытой кодовой базы Redis было продолжено в форках Valkey (форк, развиваемый при участии Amazon, Google, Oracle, Ericsson и Snap), Redict (форк от автора пользовательской оболочки Sway и языка Hare), Garnet (СУБД от Microsoft, совместимая с Redis) или KeyDB (высокопроизводительный форк Redis 5 от Snapchat). В репозиториях дистрибутивов Debian 13, Ubuntu 24.10, Fedora 41, RHEL 10, Azure Linux 3, Arch Linux и Alpine 3.20 пакет Redis был заменен на форк Valkey.
Изначально Redis поставлялся под разрешительной лицензией BSD, позволявшей не открывать свои изменения, после чего перешел на проприетарные лицензии RSALv2 (Redis Source Available License v2) и SSPLv1 (Server Side Public License v1). Начиная с Redis 8 код проекта доступен под лицензией AGPLv3, особенностью которой является наличие ограничений для приложений, обеспечивающих функционирование сетевых сервисов. При использовании AGPL-компонентов в работе сетевых сервисов, разработчик обязан предоставить пользователю исходный код всех внесенных в эти компоненты изменений, даже если лежащее в основе сервиса программное обеспечение не распространяется и используется исключительно во внутренней инфраструктуре для организации работы сервиса. Лицензия AGPLv3 совместима с GPLv3, но конфликтует с лицензией GPLv2.
Используемые до этого лицензии SSPL и RSAL приводили к дискриминации отдельных категорий пользователей, что не позволяло считать их открытыми или свободными. По своим целям обе лицензии походят друг на друга, а отличия сводятся к тому, что лицензия SSPL основана на копилефт лицензии AGPLv3, а лицензия RSAL основана на пермиссивной лицензии BSD. Лицензия RSAL позволяет использовать, изменять, распространять и интегрировать код в приложения, за исключением случаев, когда эти приложения являются коммерческими или используются для предоставления управляемых платных сервисов. Лицензия SSPL дополнительно содержит требование поставки под той же лицензией не только кода самого приложения, но и исходных текстов всех компонентов, вовлечённых в предоставление облачного сервиса.
Одновременно с объявлением о смене лицензии представлен релиз Redis 8.0. Тем не менее, несмотря на объявление о доступности релиза, в репозитории пока размещен только кандидат в релизы, а ссылка для загрузки Redis 8.0 на сайте проекта ведет на страницу с общим описанием процесса установки. В примечании к релизу также пока отмечен только выпуск 8.0-RC1.
Основные изменения в Redis 8.0:
- Добавлен тип для хранения наборов векторных данных, востребованных в системах машинного обучения и семантического поиска. Векторные наборы (vector set) расширяют ранее доступную функциональность упорядоченных списков (sorted set) возможностью хранения многомерных векторов. Для манипуляции с векторными данными добавлено 11 новых команд, таких как VADD, VREM и VSIM.
- В основной состав Redis перенесены модули Redis Query Engine, JSON, Time Series и Probabilistic Data Types, ранее поставлявшиеся в форме отдельных расширений Redis Stack.
- Интегрирована поддержка структуры данных JSON, позволяющей сохранять документы в формате JSON в привязке к ключам в Redis. Для выборочного извлечения JSON-документов и доступа к отдельным элементам может приняться язык запросов JSONPath. Присутствует поддержка атомарного обновления, позволяющего вносить изменения в отдельные поля JSON-документа без загрузки всего документа.
- Добавлена поддержка структур данных в форме временного ряда (запись образует время и набор соответствующих этому времени значений, например, полученных через периодический опрос состояния датчиков или сбор метрик). Для снижения потребления памяти задействованы алгоритмы сжатия подобных данных и предоставлена возможность определения правил прореживания архивных данных (downsampling).
- Добавлены вероятностные структуры данных: Bloom filter, Cuckoo filter, Count-min sketch, Top-k и t-digest, позволяющие существенно уменьшить размер хранилища при необходимости хранения очень больших объёмов данных за счёт потери точности при выполнении некоторых операций. "Bloom filter" и "Cuckoo filter" позволяют проверить вхождение во множество, допуская ложное определение отсутствующего элемента, но исключая пропуск существующего элемента. "Count-min sketch" прогнозирует число упоминаний значения во множестве. "Top-k" позволяет находить наиболее часто встречающиеся значения. "T-digest" даёт возможность выполнять выборки значений, больше или меньше заданного.
- В состав включён движок "Redis Query Engine" с поддержкой векторного поиска и возможностями для формирования выборок по содержимому, а не по ключам. Redis Query Engine позволяет создавать дополнительные индексы для данных, размещённых в хэшах и JSON-документах.
- Расширена поддержка ACL (Access Control Lists), позволяющих управлять доступом к данным на основе ключей и допускающая определение разных наборов правил доступа к командам с возможностью привязки наборов полномочий к каждому пользователю. Например, при помощи ACL можно определить какие пользователи могут подключаться к Redis, к каким ключам имеет доступ пользователь и какие команды может выполнять. В Redis 8 добавлены новые категории ACL для новых структур данных.
- Добавлены новые команды для работы с хэшами:HGETDEL - выдать и удалить поля хэша по указанному ключу.HGETEX - выдать поля хэша по указанному ключу и указать для них время жизни.HSETEX - выставить поля хэша по указанному ключу и указать для них время жизни.
- HGETDEL - выдать и удалить поля хэша по указанному ключу.
- HGETEX - выдать поля хэша по указанному ключу и указать для них время жизни.
- HSETEX - выставить поля хэша по указанному ключу и указать для них время жизни.
- Внесено более 30 оптимизаций производительности, приводящих в некоторых тестах к ускорению выполнения команд на 87%, повышению пропускной способности на 112%, ускорению репликации на 18% и ускорению выборки в Redis Query Engine до 16 раз (за счёт горизонтального и вертикального масштабирования). При прохождении набора из 149 тестов 90 команд стали выполняться быстрее. Значительно возросла пропускная способность, благодаря переводу на многопоточную работу компонентов для разборка команд, обработки запросов клиентов, чтения и записи в сетевые сокеты. Предложена новая реализация механизма многопоточной обработки ввода/вывода (io-threads).
- Представлен новый механизм репликаций, на 35% меньше потребляющий память и на 18% работающий быстрее. Для исключения блокировок задействованы два отдельных потока репликации - один для передачи изменений на основной узел, а другой для передачи изменений на промежуточные узлы.
Для управления данными в СУБД Redis предоставляются такие команды, как инкремент/декремент, стандартные операции над списками и множествами (объединение, пересечение), переименование ключей, множественные выборки и функции сортировки. Поддерживается два режима хранения: периодическая синхронизация данных на диск и ведение на диске лога изменений. Во втором случае гарантируется полная сохранность всех изменений. Поддерживаются транзакции, позволяющие выполнить за один шаг группу команд, гарантируя непротиворечивость и последовательность (команды от других запросов не могут вклиниться) выполнения заданного набора команд, а в случае проблем позволяя откатить изменения.
Возможна организация master-slave репликации данных на несколько серверов, осуществляемая в неблокирующем режиме. Доступен также режим обмена сообщениями "публикация/подписка", при котором создаётся канал, сообщения из которого распространяются клиентам по подписке. Все данные в полном объёме кэшируются в оперативной памяти. Клиентские библиотеки доступны для большинства популярных языков, включая Perl, Python, PHP, Java, Ruby, Tcl, JavaScript/Node.js, Go и C#.