Veröffentlichung des Redis 7.0 DBMS

Die Veröffentlichung des Redis 7.0 DBMS, das zur Klasse der NoSQL-Systeme gehört, wurde veröffentlicht. Redis bietet Funktionen zum Speichern von Schlüssel-/Wertdaten, erweitert durch die Unterstützung strukturierter Datenformate wie Listen, Hashes und Sets sowie die Möglichkeit, serverseitige Skripthandler in Lua auszuführen. Der Projektcode wird unter der BSD-Lizenz bereitgestellt. Zusätzliche Module, die erweiterte Funktionen für Unternehmensanwender bieten, wie RediSearch, RedisGraph, RedisJSON, RedisML, RedisBloom, werden seit 2019 unter einer proprietären RSAL-Lizenz bereitgestellt. Das zuletzt stagnierende GoodFORM-Projekt versuchte, die Entwicklung offener Versionen dieser Module unter der AGPLv3-Lizenz fortzusetzen.

Im Gegensatz zu In-Memory-Speichersystemen wie Memcached stellt Redis sicher, dass Daten dauerhaft auf der Festplatte gespeichert werden und dass die Datenbank im Falle eines Absturzes intakt bleibt. Der Quellcode des Projekts wird unter der BSD-Lizenz vertrieben. Client-Bibliotheken sind für die gängigsten Sprachen verfügbar, darunter Perl, Python, PHP, Java, Ruby und Tcl. Redis unterstützt Transaktionen, die es Ihnen ermöglichen, eine Gruppe von Befehlen in einem Schritt auszuführen, wodurch Konsistenz und Konsistenz (Befehle von anderen Anforderungen können nicht stören) bei der Ausführung eines bestimmten Befehlssatzes gewährleistet werden und bei Problemen ein Rollback ermöglicht wird Änderungen. Alle Daten werden vollständig im RAM zwischengespeichert.

Für die Datenverwaltung stehen Befehle wie Inkrementieren/Dekrementieren, Standardlisten- und Mengenoperationen (Vereinigung, Schnittmenge), Tastenumbenennung, Mehrfachauswahl und Sortierfunktionen zur Verfügung. Es werden zwei Speichermodi unterstützt: regelmäßige Synchronisierung der Daten auf der Festplatte und Führung eines Änderungsprotokolls auf der Festplatte. Im zweiten Fall ist die vollständige Sicherheit aller Änderungen gewährleistet. Es ist möglich, die Master-Slave-Datenreplikation auf mehreren Servern in einem nicht blockierenden Modus zu organisieren. Es ist auch ein „Publish/Subscribe“-Messaging-Modus verfügbar, bei dem ein Kanal erstellt wird, von dem aus Nachrichten per Abonnement an Clients verteilt werden.

Wichtige Änderungen in Redis 7.0:

  • Unterstützung für serverseitige Funktionen hinzugefügt. Im Gegensatz zu bisher unterstützten Skripten in der Lua-Sprache sind die Funktionen nicht an die Anwendung gebunden und zielen darauf ab, zusätzliche Logik zu implementieren, die die Fähigkeiten des Servers erweitert. Funktionen werden untrennbar mit den Daten und in Bezug auf die Datenbank und nicht auf die Anwendung verarbeitet, einschließlich der Replikation und Speicherung im persistenten Speicher.
  • Es wurde eine zweite Ausgabe der ACL vorgeschlagen, mit der Sie den Zugriff auf Daten anhand von Schlüsseln steuern und verschiedene Regelsätze für den Zugriff auf Befehle definieren können, mit der Möglichkeit, mehrere Selektoren (Berechtigungssätze) an jeden Benutzer zu binden. Jeder Schlüssel kann mit einer bestimmten Berechtigung identifiziert werden. Sie können beispielsweise den Zugriff auf das Lesen oder Schreiben einer bestimmten Teilmenge von Schlüsseln beschränken.
  • Es wird eine partitionierte (sharded) Implementierung des Publish-Subscribe-Nachrichtenverteilungsparadigmas bereitgestellt, die in einem Cluster ausgeführt wird. Dabei wird eine Nachricht an einen bestimmten Knoten gesendet, an den ein Nachrichtenkanal angeschlossen ist, und anschließend wird diese Nachricht an die verbleibenden enthaltenen Knoten umgeleitet in der Scherbe. Clients können Nachrichten empfangen, indem sie einen Kanal abonnieren, indem sie sich sowohl mit dem Hauptknoten als auch mit den sekundären Knoten des Abschnitts verbinden. Die Steuerung erfolgt über die Befehle SSUBSCRIBE, SUNSUBSCRIBE und SPUBLISH.
  • Unterstützung für die Verarbeitung von Unterbefehlen in den meisten Kontexten hinzugefügt.
  • Neue Befehle hinzugefügt:
    • ZMPOP, BZMPOP.
    • LMPOP, BLMPOP.
    • SINTERCARD, ZINTERCARD.
    • SPUBLISH, SSUBSCRIBE, SUNSUBSCRIBE, PUBSUB SHARDCHANNELS/SHARDNUMSUB.
    • EXPIRETIME, PEXPIRETIME.
    • EVAL_RO, EVALSHA_RO, SORT_RO.
    • FUNKTION *, FCALL, FCALL_RO.
    • BEFEHLSDOKUMENTE, BEFEHLSLISTE.
    • Latenzhistogramm.
    • CLUSTER SHARDS, CLUSTER LINKS, CLUSTER DELSLOTSRANGE, CLUSTER ADDSLOTSRANGE.
    • KUNDE NICHT RÄUMUNG.
    • ACL DRYRUN.
  • Es besteht die Möglichkeit, mehrere Konfigurationen gleichzeitig in einem CONFIG SET/GET-Aufruf zu verarbeiten.
  • Dem Dienstprogramm redis-cli wurden die Optionen „-json“, „-2“, „-scan“ und „-functions-rdb“ hinzugefügt.
  • Standardmäßig ist der Clientzugriff auf Einstellungen und Befehle, die sich auf die Sicherheit auswirken, deaktiviert (z. B. sind die Befehle DEBUG und MODULE deaktiviert, das Ändern von Konfigurationen mit dem Flag PROTECTED_CONFIG ist verboten). Redis-cli gibt Befehle mit vertraulichen Daten nicht mehr in eine Verlaufsdatei aus.
  • Ein großer Teil der Optimierungen zielt darauf ab, die Leistung zu steigern und den Speicherverbrauch zu reduzieren. Beispielsweise wurde der Speicherverbrauch beim Aktivieren des Cluster-Modus, beim Durchführen von Copy-on-Write-Vorgängen und beim Arbeiten mit Hashes und Zset-Schlüsseln erheblich reduziert. Verbesserte Logik zum Flushen von Daten auf die Festplatte (fsync-Aufruf). Die Anzahl der Netzwerkpakete und Systemaufrufe beim Senden von Antworten an den Client wurde reduziert. Die Replikationseffizienz wurde verbessert.
  • Die Schwachstelle CVE-2022-24735 in der Umgebung zur Ausführung von Lua-Skripten wurde behoben, die es Ihnen ermöglicht, Ihren eigenen Lua-Code zu ersetzen und seine Ausführung im Kontext eines anderen Benutzers, einschließlich eines Benutzers mit höheren Berechtigungen, zu erreichen.
  • Die Schwachstelle CVE-2022-24736 wurde behoben, die einen Absturz des Redis-Server-Prozesses aufgrund einer NULL-Zeiger-Dereferenzierung ermöglicht. Der Angriff erfolgt durch das Laden speziell entwickelter Lua-Skripte.

Source: opennet.ru

Kommentar hinzufügen