Das Redis-Projekt hat die Verwendung einer offenen Lizenz wiederaufgenommen. Redis 8.0 wurde vorgestellt.

Das Unternehmen Redis Ltd. hat eine Änderung der Lizenzpolitik des Projekts angekündigt. Ab der Version Redis 8.0 steht der Code des Projekts unter der freien Lizenz AGPLv3 zur Verfügung. Der Übergang zu einer offenen Lizenz wurde durch die Rückkehr von Salvatore Sanfilippo, dem Schöpfer der Redis-Datenbank, ins Unternehmen möglich. Nach seinem Weggang von Redis Ltd. entwickelte Salvatore eine Reihe von Vektor-erweiterungen (Vector Sets), die er in Redis integrieren wollte, jedoch wollte er, dass der von ihm geschriebene Code unter einer offenen Lizenz bereitgestellt wird. Salvatore konnte seine Kollegen von der Sinnhaftigkeit der Wiederherstellung des offenen Charakters des Projekts und der Verbesserung der Interaktion mit der Community überzeugen.

Rowan Trollope, der Geschäftsführer von Redis Ltd., erklärte, dass der im vergangenen Jahr vollzogene Übergang zu proprietären Lizenzen seine Ziele erreicht hat, da die Unternehmen AWS und Google einen Fork gegründet haben, an der gemeinsamen Entwicklung teilnehmen und ihre früheren Arbeiten teilen. Gleichzeitig hat der Wechsel der Lizenzen den Beziehungen zur Community geschadet, die das Unternehmen nun durch die Rückkehr zur Bereitstellung des Codes unter einer freien Lizenz wiederherzustellen versuchen wird.

Nach dem Übergang zu proprietären Lizenzen wurde die Entwicklung der offenen Codebasis von Redis in den Forks Valkey (ein Fork, der mit Beteiligung von Amazon, Google, Oracle, Ericsson und Snap entwickelt wird), Redict (ein Fork des Entwicklers der Benutzeroberfläche Sway und der Sprache Hare), Garnet (eine von Microsoft entwickelte Datenbank, die mit Redis kompatibel ist) oder KeyDB (ein leistungsstarker Fork von Redis 5 von Snapchat) fortgesetzt. In den Repositories der Distributionen Debian 13, Ubuntu 24.10, Fedora 41, RHEL 10, Azure Linux 3, Arch Linux und Alpine 3.20 wurde das Redis-Paket durch den Fork Valkey ersetzt.

Ursprünglich wurde Redis unter der permissiven BSD-Lizenz veröffentlicht, die keine Verpflichtung zur Offenlegung von Änderungen vorsah. Anschließend wechselte es zu proprietären Lizenzen, RSALv2 (Redis Source Available License v2) und SSPLv1 (Server Side Public License v1). Seit Redis 8 ist der Quellcode des Projekts unter der Lizenz AGPLv3 verfügbar, die durch Einschränkungen für Anwendungen gekennzeichnet ist, die den Betrieb von Netzwerkdiensten unterstützen. Wenn AGPL-kompatible Komponenten in Netzwerkdiensten verwendet werden, ist der Entwickler verpflichtet, dem Benutzer den Quellcode aller vorgenommenen Änderungen an diesen Komponenten zur Verfügung zu stellen, selbst wenn die zugrunde liegende Software nicht verteilt wird und ausschließlich in der internen Infrastruktur zur Organisation des Dienstbetriebs verwendet wird. Die AGPLv3-Lizenz ist mit der GPLv3 kompatibel, steht jedoch im Widerspruch zur GPLv2-Lizenz.

Die zuvor verwendeten Lizenzen SSPL und RSAL führten zur Diskriminierung bestimmter Benutzerkategorien, sodass sie nicht als offen oder frei betrachtet werden konnten. Beide Lizenzen verfolgen ähnliche Ziele, die Unterschiede liegen darin, dass die SSPL-Lizenz auf der Copyleft-Lizenz AGPLv3 und die RSAL-Lizenz auf der permissiven BSD-Lizenz basiert. Die RSAL-Lizenz erlaubt es, den Code zu verwenden, zu ändern, zu verbreiten und in Anwendungen zu integrieren, es sei denn, diese Anwendungen sind kommerziell oder werden zur Bereitstellung von verwalteten kostenpflichtigen Diensten verwendet. Die SSPL-Lizenz enthält zusätzlich die Anforderung, nicht nur den Code der Anwendung selbst, sondern auch die Quelltexte aller Komponenten, die an der Bereitstellung des Cloud-Dienstes beteiligt sind, unter derselben Lizenz zu liefern.

Gleichzeitig mit der Ankündigung des Lizenzwechsels wurde die Version Redis 8.0 veröffentlicht. Dennoch ist im Repository bisher nur ein Release-Kandidat verfügbar, und der Download-Link für Redis 8.0 auf der Projektwebsite führt zu einer Seite mit allgemeinen Informationen zum Installationsprozess. In den Release-Notizen wird derzeit nur die Veröffentlichung 8.0-RC1 erwähnt.

Die wichtigsten Änderungen in Redis 8.0:

  • Ein Typ zum Speichern von Vektordatensätzen wurde hinzugefügt, der in Systemen für maschinelles Lernen und semantische Suche gefragt ist. Vektorsets erweitern die zuvor verfügbaren Funktionen geordneter Listen (sorted set) um die Möglichkeit, mehrdimensionale Vektoren zu speichern. Für die Manipulation von Vektordaten wurden 11 neue Befehle hinzugefügt, wie VADD, VREM und VSIM.
  • Die Module Redis Query Engine, JSON, Time Series und Probabilistic Data Types wurden in die Kernkomponenten von Redis integriert, die zuvor als separate Erweiterungen von Redis Stack bereitgestellt wurden.
  • Die Unterstützung der Datenstruktur JSON wurde integriert, die es ermöglicht, Dokumente im JSON-Format an Schlüssel in Redis zu binden. Für die gezielte Abfrage von JSON-Dokumenten und den Zugriff auf einzelne Elemente kann die Abfragesprache JSONPath verwendet werden. Es gibt Unterstützung für atomare Updates, die Änderungen an einzelnen Feldern eines JSON-Dokuments ohne das Laden des gesamten Dokuments ermöglichen.
  • Es wurde Unterstützung für Datenstrukturen in Form von Zeitreihen hinzugefügt (ein Record bildet Zeit und eine Menge entsprechender Werte zu diesem Zeitpunkt, beispielsweise erhalten durch periodisches Abfragen von Sensordaten oder durch das Sammeln von Metriken). Um den Speicherverbrauch zu reduzieren, wurden Algorithmen zur Kompression solcher Daten implementiert und die Möglichkeit geschaffen, Regeln für das Herunterlassen von Archivdaten (downsampling) zu definieren.
  • Wahrscheinlichkeitsbasierte Datenstrukturen wurden hinzugefügt: Bloom-Filter, Cuckoo-Filter, Count-min-Skizze, Top-k und t-digest, die es ermöglichen, den Speicherbedarf erheblich zu reduzieren, wenn sehr große Datenmengen mit Verlust an Genauigkeit bei einigen Operationen gespeichert werden müssen. Der 'Bloom-Filter' und der 'Cuckoo-Filter' ermöglichen die Überprüfung der Zugehörigkeit zu einer Menge und erlauben falsche Positive für nicht vorhandene Elemente, schließen jedoch das Übersehen vorhandener Elemente aus. Die 'Count-min-Skizze' prognostiziert die Anzahl der Nennungen eines Wertes in einer Menge. 'Top-k' ermöglicht es, die am häufigsten vorkommenden Werte zu finden. 'T-digest' ermöglicht die Auswahl von Werten, die größer oder kleiner als ein festgelegter Wert sind.
  • Der 'Redis Query Engine' wurde mit Unterstützung für die Vektorsuche und Funktionen zur Auswahl von Inhalten anstelle von Schlüsseln in das System aufgenommen. Der Redis Query Engine ermöglicht das Erstellen zusätzlicher Indizes für in Hashes und JSON-Dokumenten gespeicherte Daten.
  • Die Unterstützung von ACL (Access Control Lists) wurde erweitert, um den Datenzugriff basierend auf Schlüsseln zu verwalten und verschiedene Zugriffsregelsets für Befehle zu definieren, wobei die Möglichkeit besteht, Berechtigungssets jedem Benutzer zuzuweisen. Zum Beispiel kann mit ACL festgelegt werden, welche Benutzer sich mit Redis verbinden können, auf welche Schlüssel ein Benutzer Zugriff hat und welche Befehle er ausführen kann. In Redis 8 wurden neue Kategorien von ACL für neue Datenstrukturen hinzugefügt.
  • Neue Befehle zur Arbeit mit Hashes wurden hinzugefügt:
    • HGETDEL — das Abrufen und Löschen von Feldern eines Hashes unter dem angegebenen Schlüssel.
    • HGETEX — das Abrufen von Feldern eines Hashes unter dem angegebenen Schlüssel und das Festlegen einer Lebensdauer für diese.
    • HSETEX — das Festlegen von Feldern eines Hashes unter dem angegebenen Schlüssel und das Festlegen einer Lebensdauer für diese.
  • Über 30 Leistungsoptimierungen wurden implementiert, die in einigen Tests zu einer Ausführungsgeschwindigkeitssteigerung von 87 % führen, die Durchsatzrate um 112 % erhöhen, die Replikation um 18 % beschleunigen und die Abfragegeschwindigkeit im Redis Query Engine bis zu 16 Mal erhöhen (durch horizontale und vertikale Skalierung). Bei einem Set von 149 Tests wurden 90 Befehle schneller ausgeführt. Der Durchsatz hat sich signifikant erhöht, dank des Wechsels zu multithreaded Komponenten für die Befehlsanalyse, die Verarbeitung von Clientanfragen sowie das Lesen und Schreiben in Netzwerksockets. Eine neue Implementierung des Mechanismus für die multithreaded Ein-/Ausgabeverarbeitung (io-threads) wurde vorgeschlagen.
  • Ein neuer Replikationsmechanismus wurde vorgestellt, der 35 % weniger Speicher verbraucht und 18 % schneller arbeitet. Um Blockierungen zu vermeiden, wurden zwei separate Replikationsthreads eingesetzt – einer für die Übertragung von Änderungen an den Hauptknoten und der andere für die Übertragung von Änderungen an Zwischenknoten.

Zur Verwaltung von Daten in der Redis-Datenbank werden Befehle wie Inkrement/Dekrement, Standardoperationen für Listen und Mengen (Vereinigung, Schnittmenge), Umbenennung von Schlüsseln, mehrere Abfragen und Sortierfunktionen bereitgestellt. Es werden zwei Speicherungsmodi unterstützt: regelmäßige Datensynchronisation auf die Festplatte und das Führen eines Änderungsprotokolls auf der Festplatte. Im zweiten Fall wird die vollständige Integrität aller Änderungen garantiert. Transaktionen werden unterstützt, die es ermöglichen, eine Gruppe von Befehlen in einem Schritt auszuführen und Konsistenz und Reihenfolge zu garantieren (Befehle von anderen Anfragen können sich nicht einmischen), wodurch im Falle von Problemen Änderungen zurückgesetzt werden können.

Es ist möglich, eine Master-Slave-Datenreplikation auf mehrere Server, die im nicht blockierenden Modus durchgeführt wird. Es steht auch der Nachrichtenmodus „Veröffentlichung/Abonnement“ zur Verfügung, bei dem ein Kanal erstellt wird, dessen Nachrichten an abonnierte Kunden verteilt werden. Alle Daten werden vollständig im Arbeitsspeicher zwischengespeichert. Client-Bibliotheken sind für die meisten gängigen Programmiersprachen verfügbar, darunter Perl, Python, PHP, Java, Ruby, Tcl, JavaScript/Node.js, Go und C#.

Quelle: opennet.ru

60GB SSD 8Gb DDR4