Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
JSONÜberblick über Datentypen
ElastiCache unterstützt eine Reihe von Valkey- und OSS Redis-Befehlen für die Arbeit mit dem JSON Datentyp. Im Folgenden finden Sie eine Übersicht über den JSON Datentyp und eine detaillierte Liste der unterstützten Befehle.
Terminologie
Begriff | Beschreibung |
---|---|
JSONDokument |
Bezieht sich auf den Wert eines JSON Schlüssels. |
JSONWert |
Bezieht sich auf eine Teilmenge eines JSON Dokuments, einschließlich der Wurzel, die das gesamte Dokument darstellt. Ein Wert könnte ein Container oder ein Eintrag innerhalb eines Containers sein. |
JSONElement |
Entspricht dem JSON Wert. |
Unterstützter JSON Standard
JSONDas Format entspricht den RFCJSONDatenaustauschstandards 7159
Stammelement
Das Stammelement kann einen beliebigen JSON Datentyp haben. Beachten Sie, dass in früheren Versionen der Version RFC 4627 nur Objekte oder Arrays als Stammwerte zulässig waren. Seit der Aktualisierung auf Version RFC 7159 kann das Stammverzeichnis eines JSON Dokuments einen beliebigen JSON Datentyp haben.
Begrenzung der Dokumentgröße
JSONDokumente werden intern in einem Format gespeichert, das für schnellen Zugriff und Änderungen optimiert ist. Dieses Format führt in der Regel dazu, dass etwas mehr Speicher verbraucht wird als bei der äquivalenten serialisierten Darstellung desselben Dokuments.
Der Speicherverbrauch eines einzelnen JSON Dokuments ist auf 64 MB begrenzt. Dies entspricht der Größe der speicherinternen Datenstruktur, nicht der JSON Zeichenfolge. Mit dem JSON.DEBUG
MEMORY
Befehl können Sie überprüfen, wie viel Speicherplatz ein JSON Dokument belegt.
JSON ACLs
Ähnlich wie bei den bestehenden Kategorien pro Datentyp (@string, @hash usw.) wurde eine neue Kategorie @json hinzugefügt, um die Verwaltung des Zugriffs auf JSON Befehle und Daten zu vereinfachen. Keine anderen vorhandenen Valkey- oder OSS Redis-Befehle gehören zur Kategorie @json. Alle JSON Befehle setzen alle Einschränkungen und Berechtigungen für Keyspace oder Befehle durch.
Es gibt fünf bestehende Valkey- und OSS ACL Redis-Kategorien, die aktualisiert wurden und nun die neuen JSON Befehle enthalten: @read, @write, @fast, @slow und @admin. Die folgende Tabelle zeigt die Zuordnung von JSON Befehlen zu den entsprechenden Kategorien.
JSONBefehl | @read | @write | @fast | @slow | @admin |
---|---|---|---|---|---|
JSON.ARRAPPEND |
y |
y |
|||
JSON.ARRINDEX |
y |
y |
|||
JSON.ARRINSERT |
y |
y |
|||
JSON.ARRLEN |
y |
y |
|||
JSON.ARRPOP |
y |
y |
|||
JSON.ARRTRIM |
y |
y |
|||
JSON.CLEAR |
y |
y |
|||
JSON.DEBUG |
y |
y |
y |
||
JSON.DEL |
y |
y |
|||
JSON.FORGET |
y |
y |
|||
JSON.GET |
y |
y |
|||
JSON.MGET |
y |
y |
|||
JSON.NUMINCRBY |
y |
y |
|||
JSON.NUMMULTBY |
y |
y |
|||
JSON.OBJKEYS |
y |
y |
|||
JSON.OBJLEN |
y |
y |
|||
JSON.RESP |
y |
y |
|||
JSON.SET |
y |
y |
|||
JSON.STRAPPEND |
y |
y |
|||
JSON.STRLEN |
y |
y |
|||
JSON.STRLEN |
y |
y |
|||
JSON.TOGGLE |
y |
y |
|||
JSON.TYPE |
y |
y |
|||
JSON.NUMINCRBY |
y |
y |
Begrenzung der Verschachtelungstiefe
Wenn ein JSON Objekt oder eine Reihe ein Element hat, das selbst ein anderes JSON Objekt oder Array ist, wird gesagt, dass dieses innere Objekt oder Array innerhalb des äußeren Objekts oder der äußeren Anordnung „verschachtelt“ ist. Die maximale Verschachtelungstiefe ist 128. Jeder Versuch, ein Dokument zu erstellen, das eine Verschachtelungstiefe von mehr als 128 enthält, wird mit einem Fehler abgelehnt.
Befehlssyntax
Die meisten Befehle erfordern einen Schlüsselnamen als erstes Argument. Einige Befehle haben auch ein Pfadargument. Das Pfadargument ist standardmäßig das Stammverzeichnis, wenn es optional und nicht im Lieferumfang enthalten ist.
Notation:
Erforderliche Argumente sind in spitzen Klammern eingeschlossen. Zum Beispiel: <key>
Optionale Argumente werden in eckige Klammern gesetzt. Zum Beispiel: [path]
Zusätzliche optionale Argumente sind durch eine Ellipse („...“) gekennzeichnet. Zum Beispiel: [json ...]
Pfadsyntax
Redis JSON unterstützt zwei Arten von Pfadsyntaxen:
Verbesserte Syntax — Folgt der von Goessner
beschriebenen JSONPath Syntax, wie in der folgenden Tabelle dargestellt. Wir haben die Beschreibungen in der Tabelle zur besseren Übersicht neu angeordnet und geändert. Beschränkte Syntax – Hat begrenzte Abfragemöglichkeiten.
Anmerkung
Die Ergebnisse einiger Befehle sind davon abhängig, welche Art von Pfadsyntax verwendet wird.
Wenn ein Abfragepfad mit „$“ beginnt, verwendet er die erweiterte Syntax. Andernfalls wird eine eingeschränkte Syntax verwendet.
Verbesserte Syntax
Symbol/Ausdruck | Beschreibung |
---|---|
$ |
Das Stammelement. |
. oder [] |
Untergeordneter Operator |
.. |
Rekursiver Abstieg |
* |
Platzhalter Alle Elemente in einem Objekt oder Array. |
[] |
Array-Index-Operator Der Index basiert auf 0. |
[,] |
Union-Operator |
[start:end:step] |
Array-Slice-Operator |
?() |
Wendet einen Filterausdruck (Skript) auf das aktuelle Array oder Objekt an. |
() |
Filterausdruck |
@ |
Wird in Filterausdrücken verwendet, die zum aktuellen Knoten verweisen, der verarbeitet wird. |
== |
Ist gleich; wird in Filterausdrücken verwendet. |
!= |
Ist nicht gleich; wird in Filterausdrücken verwendet. |
> |
Größer als; wird in Filterausdrücken verwendet. |
>= |
Größer als oder gleich; wird in Filterausdrücken verwendet. |
< |
Kleiner als; wird in Filterausdrücken verwendet. |
<= |
Kleiner als oder gleich; wird in Filterausdrücken verwendet. |
&& |
LogischAND, wird verwendet, um mehrere Filterausdrücke zu kombinieren. |
|| |
Logisches ODER; wird verwendet, um mehrere Filterausdrücke zu kombinieren. |
Beispiele
Die folgenden Beispiele basieren auf den XML Beispieldaten von Goessner
{ "store": { "book": [ { "category": "reference", "author": "Nigel Rees", "title": "Sayings of the Century", "price": 8.95, "in-stock": true, "sold": true }, { "category": "fiction", "author": "Evelyn Waugh", "title": "Sword of Honour", "price": 12.99, "in-stock": false, "sold": true }, { "category": "fiction", "author": "Herman Melville", "title": "Moby Dick", "isbn": "0-553-21311-3", "price": 8.99, "in-stock": true, "sold": false }, { "category": "fiction", "author": "J. R. R. Tolkien", "title": "The Lord of the Rings", "isbn": "0-395-19395-8", "price": 22.99, "in-stock": false, "sold": false } ], "bicycle": { "color": "red", "price": 19.95, "in-stock": true, "sold": false } } }
Pfad | Beschreibung |
---|---|
$.store.book[*].author |
Die Autoren aller Bücher im Laden. |
$..author |
Alle Autoren |
$.store.* |
Alle Mitglieder des Ladens. |
$["store"].* |
Alle Mitglieder des Ladens. |
$.store..price |
Der Preis von allem im Laden. |
$..* |
Alle rekursiven Mitglieder der Struktur. JSON |
$..book[*] |
Alle Bücher. |
$..book[0] |
Das erste Buch. |
$..book[-1] |
Das letzte Buch. |
$..book[0:2] |
Die ersten beiden Bücher. |
$..book[0,1] |
Die ersten beiden Bücher. |
$..book[0:4] |
Bücher von Index 0 bis 3 (Endindex ist nicht inklusive). |
$..book[0:4:2] |
Bücher bei Index 0, 2. |
$..book[?(@.isbn)] |
Alle Bücher mit einer ISBN Nummer. |
$..book[?(@.price<10)] |
Alle Bücher günstiger als 10 USD. |
'$..book[?(@.price < 10)]' |
Alle Bücher günstiger als 10 USD. (Der Pfad muss in Anführungszeichen gesetzt werden, wenn er Leerzeichen enthält.) |
'$..book[?(@["price"] < 10)]' |
Alle Bücher günstiger als 10 USD. |
'$..book[?(@.["price"] < 10)]' |
Alle Bücher günstiger als 10 USD. |
$..book[?(@.price>=10&&@.price<=100)] |
Alle Bücher im Preisbereich von 10 bis 100 USD inklusive. |
'$..book[?(@.price>=10 && @.price<=100)]' |
Alle Bücher im Preisbereich von 10 bis 100 USD inklusive. (Der Pfad muss in Anführungszeichen gesetzt werden, wenn er Leerzeichen enthält.) |
$..book[?(@.sold==true||@.in-stock==false)] |
Alle Bücher verkauft oder ausverkauft. |
'$..book[?(@.sold == true || @.in-stock == false)]' |
Alle Bücher verkauft oder ausverkauft. (Der Pfad muss in Anführungszeichen gesetzt werden, wenn er Leerzeichen enthält.) |
'$.store.book[?(@.["category"] == "fiction")]' |
Alle Bücher der Kategorie Belletristik. |
'$.store.book[?(@.["category"] != "fiction")]' |
Alle Bücher in der Kategorie Sachbücher. |
Zusätzliche Beispiele für Filterausdrücke:
127.0.0.1:6379> JSON.SET k1 . '{"books": [{"price":5,"sold":true,"in-stock":true,"title":"foo"}, {"price":15,"sold":false,"title":"abc"}]}' OK 127.0.0.1:6379> JSON.GET k1 $.books[?(@.price>1&&@.price<20&&@.in-stock)] "[{\"price\":5,\"sold\":true,\"in-stock\":true,\"title\":\"foo\"}]" 127.0.0.1:6379> JSON.GET k1 '$.books[?(@.price>1 && @.price<20 && @.in-stock)]' "[{\"price\":5,\"sold\":true,\"in-stock\":true,\"title\":\"foo\"}]" 127.0.0.1:6379> JSON.GET k1 '$.books[?((@.price>1 && @.price<20) && (@.sold==false))]' "[{\"price\":15,\"sold\":false,\"title\":\"abc\"}]" 127.0.0.1:6379> JSON.GET k1 '$.books[?(@.title == "abc")]' [{"price":15,"sold":false,"title":"abc"}] 127.0.0.1:6379> JSON.SET k2 . '[1,2,3,4,5]' 127.0.0.1:6379> JSON.GET k2 $.*.[?(@>2)] "[3,4,5]" 127.0.0.1:6379> JSON.GET k2 '$.*.[?(@ > 2)]' "[3,4,5]" 127.0.0.1:6379> JSON.SET k3 . '[true,false,true,false,null,1,2,3,4]' OK 127.0.0.1:6379> JSON.GET k3 $.*.[?(@==true)] "[true,true]" 127.0.0.1:6379> JSON.GET k3 '$.*.[?(@ == true)]' "[true,true]" 127.0.0.1:6379> JSON.GET k3 $.*.[?(@>1)] "[2,3,4]" 127.0.0.1:6379> JSON.GET k3 '$.*.[?(@ > 1)]' "[2,3,4]"
Beschränkte Syntax
Symbol/Ausdruck | Beschreibung |
---|---|
. oder [] |
Untergeordneter Operator |
[] |
Array-Index-Operator Der Index basiert auf 0. |
Beispiele
Pfad | Beschreibung |
---|---|
.store.book[0].author |
Der Autor des ersten Buches. |
.store.book[-1].author |
Der Autor des letzten Buches. |
.address.city |
Name der Stadt. |
["store"]["book"][0]["title"] |
Der Titel des ersten Buches. |
["store"]["book"][-1]["title"] |
Der Titel des letzten Buches. |
Anmerkung
Alle Goessner
Häufige Fehlerpräfixe
Jede Fehlermeldung hat ein Präfix. Im Folgenden finden Sie eine Liste mit allgemeinen Fehlerpräfixen.
Präfix | Beschreibung |
---|---|
ERR |
Ein allgemeiner Fehler. |
LIMIT |
Ein Fehler, der auftritt, wenn die Größenbeschränkung überschritten wird. Zum Beispiel wurde die Größenbeschränkung oder Verschachtelungstiefe überschritten. |
NONEXISTENT |
Ein Schlüssel oder Pfad ist nicht vorhanden. |
OUTOFBOUNDARIES |
Array-Index außerhalb des gültigen Bereichs. |
SYNTAXERR |
Syntaxfehler |
WRONGTYPE |
Falscher Werttyp. |
JSONverwandte Metriken
Die folgenden JSON Informationsmetriken werden bereitgestellt:
Informationen | Beschreibung |
---|---|
json_total_memory_bytes |
Gesamter Speicher, der JSON Objekten zugewiesen ist. |
json_num_documents |
Gesamtzahl der Dokumente in Valkey oder OSS Redis. |
Führen Sie den folgenden Befehl aus, um Kernmetriken abzufragen:
info json_core_metrics
Wie ElastiCache interagiert Valkey und Redis OSS mit JSON
Im folgenden Abschnitt wird beschrieben, wie Valkey und Redis ElastiCache mit dem Datentyp OSS interagieren. JSON
Rangfolge der Operatoren
Bei der Bewertung bedingter Ausdrücke zum Filtern, haben &&s zuerst Vorrang, und dann werden ||s ausgewertet, wie es in den meisten Sprachen üblich ist. Operationen innerhalb von Klammern werden zuerst ausgeführt.
Verhalten der maximalen Verschachtelungsbeschränkung
Das maximale Limit für die Verschachtelung von Pfaden in ElastiCache (OSSRedis) beträgt 128. Ein Wert wie $.a.b.c.d...
kann also nur 128 Level erreichen.
Umgang mit numerischen Werten
JSONhat keine separaten Datentypen für Ganzzahlen und Fließkommazahlen. Sie werden alle Zahlen genannt.
Numerische Repräsentationen:
Wenn eine JSON Zahl bei der Eingabe empfangen wird, wird sie in eine der beiden internen Binärdarstellungen umgewandelt: eine 64-Bit-Ganzzahl mit Vorzeichen oder eine 64-Bit-Gleitkommazahl IEEE mit doppelter Genauigkeit. Die Ursprüngliche Zeichenfolge und alle ihre Formatierungen werden nicht beibehalten. Wenn also eine Zahl als Teil einer JSON Antwort ausgegeben wird, wird sie aus der internen Binärdarstellung in eine druckbare Zeichenfolge konvertiert, die generische Formatierungsregeln verwendet. Diese Regeln könnten dazu führen, dass eine andere Zeichenfolge generiert wird als empfangen wurde.
Arithmetische Befehle NUMINCRBY
und NUMMULTBY
:
Wenn beide Zahlen ganze Zahlen sind und das Ergebnis außerhalb des Bereichs von liegt
int64
, wird es automatisch zu einer 64-Bit-Gleitkommazahl IEEE mit doppelter Genauigkeit.Wenn mindestens eine der Zahlen eine Fließkommazahl ist, ist das Ergebnis eine 64-Bit-Gleitkommazahl IEEE mit doppelter Genauigkeit.
Wenn das Ergebnis den Bereich von 64 Bit (IEEEdoppelt) überschreitet, gibt der Befehl einen
OVERFLOW
Fehler zurück.
Eine detaillierte Liste der verfügbaren Befehle finden Sie unter Unterstützte Valkey- und Redis-Befehle OSS.
Direktes Array-Filtern
ElastiCache mit Valkey oder Redis werden Array-Objekte direkt OSS gefiltert.
Bei Daten wie [0,1,2,3,4,5,6]
und einer Pfadabfrage wie $[?(@<4)]
oder Daten wie {"my_key":[0,1,2,3,4,5,6]}
und einer Pfadabfrage wie $.my_key[?(@<4)]
ElastiCache mit Valkey oder Redis OSS würde unter beiden Umständen [1,2,3] zurückgegeben werden.
Array-Indizierung
ElastiCache mit Valkey oder Redis sind sowohl positive als auch OSS negative Indizes für Arrays möglich. Bei einem Array mit der Länge fünf würde 0 das erste Element abfragen, 1 das zweite usw. Negative Zahlen beginnen am Ende des Arrays, also würde -1 das fünfte Element abfragen, -2 das vierte Element usw.
Um ein vorhersehbares Verhalten für Kunden sicherzustellen, ElastiCache rundet Valkey oder Redis Array-Indizes OSS nicht nach unten oder oben ab. Wenn Sie also ein Array mit einer Länge von 5 haben, würde der Aufruf von Index 5 oder höher oder -6 oder niedriger zu keinem Ergebnis führen.
Strikte Syntaxbewertung
MemoryDB erlaubt keine JSON Pfade mit ungültiger Syntax, selbst wenn eine Teilmenge des Pfads einen gültigen Pfad enthält. Dies soll für unsere Kunden ein korrektes Verhalten sicherstellen.