Компания Redis Ltd обяви за промяна на лицензионната политика на проекта. Започвайки с издаването на Redis 8.0, кодът на проекта стана достъпен под свободната лицензия AGPLv3. Преходът към отворена лицензия стана възможен благодарение на завръщането в компанията на Салвадор Санфилиппо (Salvatore Sanfilippo), създателя на СУБД Redis. След напускането си от Redis Ltd, Салвадор разработи набор от векторни разширения (Vector Sets), които беше готов да предаде на Redis, но искаше създаденият от него код да бъде предоставен под открита лицензия. Салвадор успя да убеди колегите си в целесъобразността на възстановяването на открития характер на проекта и подобряването на взаимодействието с общността.
Роуън Троллоп (Rowan Trollope), директор на 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 v2) и SSPLv1 (Лицензия за публично ползване на сървъра 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 Query Engine, JSON, Time Series и Probabilistic Data Types, преди доставяни в форма на отделни разширения на Redis Stack, са интегрирани в основния състав на Redis.
- Интегрирана е поддръжка на структурата от данни 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 — задава полета на хеш по указан ключ и задава време за живот за тях.
- Направени са над 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#.
Източник: opennet.ru
