JavaScript Object Notation (JSON) bietet eine effiziente Möglichkeit, strukturierte Daten in Memorystore for Valkey zu speichern und zu bearbeiten. Die Verwendung von JSON bietet folgende Vorteile:
- Schnelle Such- und Filterfunktionen
- JSON-Daten direkt aktualisieren, ohne ganze Dokumente überschreiben zu müssen
- Komplexe Datenstrukturen effizient abfragen, ändern und verwalten
Wenn Ihre Anwendungen eine dynamische und flexible Datenspeicherung erfordern, ist JSON ideal für Sie. Außerdem können Sie mit JSON komplexe Datasets in Memorystore for Valkey-Instanzen codieren, ohne Schemas zu verwenden. Sie können Daten in den Instanzen speichern, darauf zugreifen und sie aktualisieren. Außerdem müssen Sie keinen benutzerdefinierten Code zum Serialisieren und Deserialisieren der Daten verwalten.
Ein JSON-Dokument ist ein für Menschen lesbares Textformat zum Speichern und Übertragen von Daten. Dieses Format besteht aus Schlüssel/Wert-Paaren und strukturierten Datentypen. Mit dem JSON-Format können Sie Teile eines JSON-Dokuments abrufen und aktualisieren, ohne das gesamte Objekt bearbeiten zu müssen. Das kann die Leistung verbessern und die Kosten senken. Außerdem entspricht das JSON-Format RFC 7159, dem ECMA-404-Standard für den JSON-Datenaustausch und UTF-8 Unicode in JSON-Text.
Verfügbarkeit
Wenn Sie eine Memorystore for Valkey-Instanz der Version 8.0 oder höher erstellen, ist Version 1.0 des JSON-Datentyps und der zugehörigen Befehle automatisch verfügbar. Dieser Datentyp ist API-kompatibel mit Version 2 des JSON-Moduls. Gemäß RFC 7159 kann das Stammelement eines JSON-Dokuments einen beliebigen JSON-Datentyp haben.
JSON-Attribute
JSON hat die folgenden Eigenschaften:
Maximale Dokumentgröße: Um potenzielle Probleme mit unzureichendem Arbeitsspeicher durch böswillige oder unbegrenzte Einfügungen zu vermeiden, können Sie ein Limit für die Größe einzelner JSON-Schlüssel festlegen.
Standardmäßig ist der Wert für diese Property auf
0festgelegt. Das bedeutet, dass die Größe des JSON-Dokuments nicht begrenzt ist. Verwenden Sie den BefehlCONFIG SET json.max-document-size VALUE, um dieses Limit festzulegen. Dabei ist VALUE die maximale Größe des Dokuments. Wenn Sie beispielsweise4123456angeben, beträgt die maximale Dokumentgröße 4.123.456 Byte (4 MB).Mit den Befehlen
JSON.DEBUG MEMORY KEYoderMEMORY USAGE KEYkönnen Sie sehen, wie viel Arbeitsspeicher von einem JSON-Wert verwendet wird, der in einem angegebenen Schlüssel gespeichert ist. Bei diesen Befehlen ist KEY der Name des Schlüssels, in dem der JSON-Wert gespeichert ist.Maximale Tiefe: Die maximale Verschachtelungsebene für JSON-Objekte und ‑Arrays. Weitere Informationen finden Sie unter Maximale Schachtelungstiefe.
Größe des JSON-Dokuments
Da ein JSON-Dokument intern in einem Format gespeichert wird, das für schnellen Zugriff und schnelle Änderungen optimiert ist, kann dieser Dokumenttyp viel Speicherplatz belegen. Wenn Sie prüfen möchten, wie viel Speicherplatz ein JSON-Dokument belegt, verwenden Sie den Befehl JSON.DEBUG MEMORY KEY, wobei KEY der Name des Schlüssels ist, der das Dokument enthält.
JSON-Kategorien
Verwenden Sie die Kategorie @json, um den Zugriff auf JSON-Befehle und Daten zu verwalten. Neben dieser Kategorie verwenden auch die folgenden Kategorien JSON-Befehle: @read, @write, @fast, @slow und @admin.
In der folgenden Tabelle sehen Sie, ob Sie JSON-Befehle den Kategorien @read, @write, @fast, @slow, @admin und @json zuordnen können.
| JSON-Befehl | @json |
@read |
@write |
@fast |
@slow |
@admin |
|---|---|---|---|---|---|---|
JSON.ARRAPPEND |
J | N | J | J | N | N |
JSON.ARRINDEX |
J | J | N | J | N | N |
JSON.ARRINSERT |
J | N | J | J | N | N |
JSON.ARRLEN |
J | J | N | J | N | N |
JSON.ARRPOP |
J | N | J | J | N | N |
JSON.ARRTRIM |
J | N | J | J | N | N |
JSON.CLEAR |
J | N | J | J | N | N |
JSON.DEBUG |
J | J | N | N | J | J |
JSON.DEL |
J | N | J | J | N | N |
JSON.FORGET |
J | N | J | J | N | N |
JSON.GET |
J | J | N | J | N | N |
JSON.MGET |
J | J | N | J | N | N |
JSON.MSET |
J | N | J | N | J | N |
JSON.NUMINCRBY |
J | N | J | J | N | N |
JSON.NUMMULTBY |
J | N | J | J | N | N |
JSON.OBJKEYS |
J | J | N | J | N | N |
JSON.OBJLEN |
J | J | N | J | N | N |
JSON.RESP |
J | J | N | J | N | N |
JSON.SET |
J | N | J | N | J | N |
JSON.STRAPPEND |
J | N | J | J | N | N |
JSON.STRLEN |
J | J | N | J | N | N |
JSON.TOGGLE |
J | N | J | J | N | N |
JSON.TYPE |
J | J | N | J | N | N |
JSON-Befehle
In diesem Abschnitt werden die JSON-Befehle aufgeführt und beschrieben, mit denen Sie Vorgänge für JSON-Dokumente ausführen können.
| Befehl | Beschreibung |
|---|---|
JSON.ARRAPPEND |
Hängen Sie dem Array am Pfad einen oder mehrere JSON-Werte an. |
JSON.ARRINDEX |
Sucht nach dem ersten Vorkommen eines skalaren JSON-Werts in einem Array. |
JSON.ARRINSERT |
Fügt einen oder mehrere JSON-Werte in ein Array an einem Pfad vor dem angegebenen Index ein. |
JSON.ARRLEN |
Ruft die Länge des JSON-Arrays am Pfad ab. |
JSON.ARRPOP |
Entfernt ein Element aus einem Array an einem Index und gibt es zurück. |
JSON.ARRTRIM |
Ein Array am Pfad so kürzen, dass es nur den von Ihnen angegebenen inklusiven Bereich von Elementen enthält. |
JSON.CLEAR |
Arrays oder ein JSON-Objekt an einem von Ihnen angegebenen Pfad löschen |
JSON.DEBUG |
Informationen zu einem JSON-Dokument abrufen Memorystore for Valkey
unterstützt die folgenden Unterbefehle:
|
JSON.DELJSON.FORGET |
Löschen Sie JSON-Werte an einem von Ihnen angegebenen Pfad. |
JSON.GET |
Gibt einen Wert an einem Pfad zurück, den Sie in serialisierter JSON-Form angeben. |
JSON.MGET |
Gibt Werte an einem von Ihnen angegebenen Pfad aus mehreren Dokumentschlüsseln zurück. |
JSON.MSET |
Legt mehrere JSON-Werte an einem Pfad für mehrere Schlüssel fest. |
JSON.NUMINCRBY |
Erhöht numerische Werte, die an einem Pfad gespeichert sind, um eine von Ihnen angegebene Zahl. |
JSON.NUMMULTBY |
Numerische Werte, die in einem Pfad gespeichert sind, mit einer von Ihnen angegebenen Zahl multiplizieren. |
JSON.OBJKEYS |
Schlüsselnamen aus JSON-Objekten an einem von Ihnen angegebenen Pfad abrufen |
JSON.OBJLEN |
Ruft die Anzahl der Schlüssel in einem JSON-Objekt an einem von Ihnen angegebenen Pfad ab. |
JSON.RESP |
Gibt den JSON-Wert eines Schlüssels im Redis-Serialisierungsprotokoll (RESP) zurück. |
JSON.SET |
JSON-Werte an einem von Ihnen angegebenen Pfad festlegen. |
JSON.STRAPPEND |
Hängen Sie einen String an JSON-Strings an einem von Ihnen angegebenen Pfad an. |
JSON.STRLEN |
Die Länge von JSON-Stringwerten an einem von Ihnen angegebenen Pfad abrufen. |
JSON.TOGGLE |
Schalten Sie einen booleschen Wert zwischen true und false um. Dieser Wert wird an einem von Ihnen angegebenen Pfad gespeichert. |
JSON.TYPE |
Ruft den Typ eines JSON-Werts an einem von Ihnen angegebenen Pfad ab. |
Interaktion von Memorystore for Valkey mit JSON
In diesem Abschnitt wird beschrieben, wie Memorystore for Valkey mit dem JSON-Datentyp interagiert.
Mehrere bedingte Ausdrücke
Wenn es mehrere bedingte Ausdrücke zum Filtern gibt, werden sie von Memorystore for Valkey in der folgenden Reihenfolge ausgewertet:
- Operationen in Klammern
- Der logische Ausdruck
AND(&&) - Der logische Ausdruck
OR(||)
Maximale Verschachtelungstiefe
Wenn ein JSON-Objekt oder -Array ein Element enthält, das ein weiteres JSON-Objekt oder -Array ist, wird das innere Objekt oder Array im äußeren Objekt oder Array verschachtelt. Die maximale Verschachtelungstiefe beträgt 128. Ein Wert wie $.a.b.c.d... kann also nur 128 Stufen erreichen.
Wenn Sie versuchen, ein JSON-Dokument mit einer Schachtelungstiefe von mehr als 128 zu erstellen, wird das Dokument von Memorystore for Valkey abgelehnt und Sie erhalten eine Fehlermeldung. Sie können dieses Limit jedoch mit dem Befehl CONFIG SET json.max-path-limit VALUE anpassen, wobei VALUE das gewünschte Tiefenlimit ist.
JSON-Zahlen
In JSON werden sowohl Gleitkommazahlen als auch Ganzzahlen als „Zahlen“ bezeichnet, da sie denselben Datentyp haben. Wenn Memorystore for Valkey eine JSON-Zahl empfängt, wird die Zahl in eine der folgenden internen binären Darstellungen konvertiert:
- Eine 64-Bit-IEEE-Gleitkommazahl mit doppelter Genauigkeit
- Eine vorzeichenbehaftete 64-Bit-Ganzzahl
In JSON werden der ursprüngliche String und seine Formatierung nicht beibehalten. Wenn Memorystore for Valkey eine Zahl als Teil einer JSON-Antwort ausgibt, wird die Zahl von der internen binären Darstellung in einen druckbaren String konvertiert, der allgemeine Formatierungsregeln verwendet.
Wenn Sie die Befehle JSON.NUMINCRBY und JSON.NUMMULTBY mit JSON-Zahlen verwenden, gelten die folgenden Bedingungen:
- Wenn beide Zahlen Ganzzahlen sind und das Ergebnis außerhalb des Bereichs von
int64liegt, wird das Ergebnis automatisch zu einer 64-Bit-IEEE-Gleitkommazahl mit doppelter Genauigkeit. - Wenn mindestens eine der Zahlen eine Gleitkommazahl ist, ist das Ergebnis eine 64-Bit-IEEE-Gleitkommazahl mit doppelter Genauigkeit.
- Wenn das Ergebnis den Bereich der 64-Bit-IEEE-Gleitkommazahl mit doppelter Genauigkeit überschreitet, erhalten Sie eine
OVERFLOW-Fehlermeldung.
Direkte Arrays
Memorystore for Valkey filtert Array-Objekte direkt. Wenn Sie beispielsweise Daten wie
[0,1,2,3] und eine Pfadabfrage wie$[?(@<3)] haben, gibt Memorystore for Valkey [0,1,2] zurück. Bei Daten wie {"my_valkey_key":[0,1,2,3]} und einer Pfadabfrage wie
$.my_valkey_key[?(@<3)] gibt Memorystore for Valkey auch [0,1,2] zurück.
Array-Indizes
Mit Memorystore for Valkey können Sie positive und negative Indexe für Arrays verwenden. Für diese Arten von Indexen gelten die folgenden Bedingungen:
- Positiver Index: Die Nummerierung beginnt am Anfang des Arrays. Wenn ein Array beispielsweise einen positiven Index von drei hat, wird mit 0 das erste Element, mit 1 das zweite Element und mit 2 das dritte Element abgefragt.
- Negativer Index: Die Nummerierung beginnt am Ende des Arrays. Wenn ein Array einen negativen Index von drei hat, wird mit -1 das dritte Element, mit -2 das zweite Element und mit -3 das erste Element abgefragt.
Bei Memorystore for Valkey werden Indexe nicht auf- oder abgerundet. Wenn Sie ein Array mit einer Länge von 3 haben und entweder einen positiven Index aufrufen, der größer als 3 ist, oder einen negativen Index, der kleiner als –3 ist, gibt Memorystore for Valkey kein Ergebnis zurück.
Syntax für JSON-Pfade
Sie können keine ungültige Syntax für Ihre JSON-Pfade verwenden. Diese Bedingung gilt auch dann, wenn ein Teil eines JSON-Pfads mit ungültiger Syntax einen gültigen Pfad enthält.