Redis Ltd poinformował o zmianie polityki licencjonowania projektu. Od czasu wydania Redis 8.0 kod projektu jest udostępniany na podstawie bezpłatnej licencji AGPLv3. Przejście na otwartą licencję stało się możliwe dzięki powrotowi do firmy Salvatora Sanfilippo, twórcy systemu zarządzania bazą danych Redis. Po odejściu z Redis Ltd Salvador opracował zestaw zestawów wektorowych, którymi chciał podzielić się z Redis, ale chciał, aby stworzony przez niego kod został udostępniony na licencji open source. Salvadorowi udało się przekonać kolegów o zasadności przywrócenia otwartego charakteru projektu i poprawienia interakcji ze społecznością.
Rowan Trollope, dyrektor Redis Ltd, powiedział, że przejście na licencje zastrzeżone w zeszłym roku osiągnęło swój cel, ponieważ AWS i Google rozdzieliły platformę, zaczęły ją wspólnie rozwijać i dzielić się swoimi dotychczasowymi pracami. Zmiana licencji nadszarpnęła jednak relacje ze społecznością, które firma spróbuje teraz odbudować, powracając do udostępniania kodu na wolnej licencji.
Po przejściu na licencje własnościowe, rozwój otwartego kodu źródłowego Redis był kontynuowany w forkach Valkey (fork opracowany przy udziale Amazon, Google, Oracle, Ericsson i Snap), Redict (fork autora interfejsu użytkownika Sway i języka Hare), Garnet (system zarządzania bazą danych kompatybilny z Redis od Microsoftu) oraz KeyDB (wysokowydajny fork Redis 5 od Snapchata). Repozytoria dystrybucji Debian 13, Ubuntu 24.10, Fedora 41, RHEL 10, Azure Linux 3, Łuk Linux a Alpine 3.20 pakiet Redis został zastąpiony forkiem Valkey.
Redis został pierwotnie wydany na podstawie liberalnej licencji BSD, która pozwalała programistom zachować prywatność wprowadzanych przez nich zmian, jednak od tego czasu zmienił się na licencje zastrzeżone RSALv2 (Redis Source Available License v2) i SSPLv1 (Server Side Public License v1). Od wersji Redis 8 kod projektu jest dostępny na podstawie licencji AGPLv3, której szczególną cechą jest nakładanie ograniczeń na aplikacje świadczące usługi sieciowe. W przypadku wykorzystania komponentów AGPL w eksploatacji usług sieciowych, twórca ma obowiązek udostępnić użytkownikowi kod źródłowy wszystkich zmian dokonanych w tych komponentach, nawet jeśli oprogramowanie stanowiące podstawę usługi nie jest rozpowszechniane, a wykorzystywane jest wyłącznie w wewnętrznej infrastrukturze służącej organizacji eksploatacji usługi. Licencja AGPLv3 jest zgodna z licencją GPLv3, ale koliduje z licencją GPLv2.
Wcześniej stosowane licencje SSPL i RSAL dyskryminowały pewne kategorie użytkowników, co uniemożliwiło uznanie ich za otwarte lub bezpłatne. Obie licencje mają podobne cele, ale różnią się tym, że licencja SSPL opiera się na licencji typu copyleft AGPLv3, podczas gdy licencja RSAL opiera się na licencji permisywnej BSD. Licencja RSAL pozwala na używanie, modyfikowanie, dystrybucję i integrowanie kodu w aplikacjach, z wyjątkiem aplikacji komercyjnych lub służących do świadczenia zarządzanych płatnych usług. Licencja SSPL zawiera dodatkowo wymóg dostarczenia na podstawie tej samej licencji nie tylko kodu samej aplikacji, ale także kodu źródłowego wszystkich komponentów zaangażowanych w świadczenie usługi w chmurze.
Wraz z ogłoszeniem zmiany licencji wydano Redis 8.0. Jednak mimo ogłoszenia dostępności wersji, repozytorium zawiera obecnie jedynie wersję Release Candidate, a link do pobrania Redis 8.0 na stronie internetowej projektu prowadzi do strony z ogólnym opisem procesu instalacji. Informacje o wydaniu na razie obejmują tylko wersję 8.0-RC1.
Główne zmiany w Redis 8.0:
- Dodano typ służący do przechowywania zestawów danych wektorowych, na które jest zapotrzebowanie w systemach uczenia maszynowego i wyszukiwania semantycznego. Zestawy wektorów rozszerzają dostępną wcześniej funkcjonalność zestawów sortowanych o możliwość przechowywania wektorów wielowymiarowych. Dodano 11 nowych poleceń umożliwiających manipulowanie danymi wektorowymi, takich jak VADD, VREM i VSIM.
- Moduły Redis Query Engine, JSON, Time Series i Probabilistic Data Types, wcześniej dostarczane jako osobne rozszerzenia Redis Stack, zostały przeniesione do głównego pakietu Redis.
- Zintegrowano obsługę struktury danych JSON, co pozwala na zapisywanie dokumentów w formacie JSON, powiązanych z kluczami w Redis. Język zapytań JSONPath można wykorzystać do selektywnego wyodrębniania dokumentów JSON i uzyskiwania dostępu do pojedynczych elementów. Obsługiwana jest aktualizacja atomowa, która umożliwia wprowadzanie zmian w poszczególnych polach dokumentu JSON bez konieczności ładowania całego dokumentu.
- Dodano obsługę struktur danych w formie szeregów czasowych (rekord tworzy czas oraz zbiór wartości odpowiadających temu czasowi, np. uzyskanych poprzez okresowe badanie stanu czujników lub zbieranie metryk). Aby ograniczyć zużycie pamięci, stosuje się algorytmy kompresji takich danych oraz przewidziano możliwość definiowania reguł próbkowania w dół zarchiwizowanych danych.
- Dodano struktury danych probabilistycznych: filtr Blooma, filtr Cuckoo, szkic Count-min, Top-k i t-digest, które pozwalają znacząco zmniejszyć rozmiar pamięci masowej, gdy zachodzi potrzeba składowania bardzo dużych ilości danych kosztem utraty dokładności podczas wykonywania niektórych operacji. Filtr Blooma i filtr Kukułki umożliwiają sprawdzenie, czy dany element znajduje się w zestawie, dopuszczając fałszywy alarm w przypadku brakującego elementu, ale wykluczając pominięcie istniejącego elementu. „Szkic Count-min” przewiduje, ile razy dana wartość pojawi się w zestawie. „Top-k” umożliwia znalezienie najczęściej występujących wartości. „T-digest” pozwala na wykonanie próbkowania wartości większych lub mniejszych od zadanej wartości.
- W pakiecie znajduje się moduł Redis Query Engine, który obsługuje wyszukiwanie wektorowe i umożliwia generowanie selekcji według zawartości, a nie kluczy. Redis Query Engine umożliwia tworzenie dodatkowych indeksów dla danych przechowywanych w skrótach i dokumentach JSON.
- Rozszerzone wsparcie dla list kontroli dostępu (ACL), które umożliwiają kontrolowanie dostępu do danych na podstawie kluczy i pozwalają definiować różne zestawy reguł dostępu do poleceń, z możliwością powiązania zestawu uprawnień z każdym użytkownikiem. Na przykład za pomocą list kontroli dostępu można zdefiniować, którzy użytkownicy mogą łączyć się z Redis, do których kluczy użytkownik ma dostęp i które polecenia użytkownik może wykonywać. Redis 8 dodaje nowe kategorie list kontroli dostępu dla nowych struktur danych.
- Dodano nowe polecenia do pracy z haszami:
- HGETDEL — wyprowadza i usuwa pola skrótu według określonego klucza.
- HGETEX – zwraca pola skrótu dla określonego klucza i określa ich czas życia.
- HSETEX — ustaw pola skrótu dla określonego klucza i określ ich czas życia.
- Wprowadzono ponad 30 optymalizacji wydajności, dzięki którym niektóre testy wykazały o 87% szybsze wykonywanie poleceń, o 112% większą przepustowość, o 18% szybszą replikację i nawet 16-krotnie szybsze pobieranie danych przez Redis Query Engine (dzięki skalowaniu poziomemu i pionowemu). Po uruchomieniu zestawu 149 testów, 90 poleceń zaczęło wykonywać się szybciej. Przepustowość znacznie wzrosła dzięki przejściu na wielowątkową obsługę komponentów służących do analizy poleceń, przetwarzania żądań klientów, odczytu i zapisu do gniazd sieciowych. Zaproponowano nową implementację mechanizmu wielowątkowego przetwarzania wejścia/wyjścia (IO-Threads).
- Wprowadzono nowy silnik replikacji, który wykorzystuje o 35% mniej pamięci i jest o 18% szybszy. Aby uniknąć blokowania, używane są dwa oddzielne wątki replikacji - jeden do przesyłania zmian do węzła głównego, a drugi do przesyłania zmian do węzłów pośrednich.
Do zarządzania danymi Redis udostępnia polecenia takie jak zwiększanie/zmniejszanie, standardowe operacje na listach i zbiorach (suma, część wspólna), zmiana nazw kluczy, wybór wielu opcji i funkcje sortowania. Obsługiwane są dwa tryby przechowywania danych: okresowa synchronizacja danych na dysku i prowadzenie dziennika zmian na dysku. W drugim przypadku mamy gwarancję pełnego bezpieczeństwa wszystkich zmian. Obsługiwane są transakcje, co pozwala na wykonanie grupy poleceń w jednym kroku, zapewniając spójność i kolejność (polecenia z innych żądań nie mogą zakłócać) wykonywania danego zestawu poleceń oraz umożliwiając wycofanie zmian w przypadku wystąpienia problemów.
Istnieje możliwość zorganizowania replikacji danych typu master-slave na kilku serwerach. serwery, wykonywane w trybie nieblokującym. Dostępny jest również tryb przesyłania wiadomości publikuj/subskrybuj, tworzący kanał, z którego wiadomości są dystrybuowane do klientów za pośrednictwem subskrypcji. Wszystkie dane są w pełni buforowane w pamięci RAM. Biblioteki klienckie są dostępne dla większości popularnych języków, w tym Perla, Pythona, PHP, Javy, Ruby, Tcl, JavaScript/Node.js, Go i C#.
Źródło: opennet.ru
