JavaScript Object Notation (JSON) offre un modo efficiente per archiviare e manipolare i dati strutturati in Memorystore for Valkey. L'utilizzo di JSON offre i seguenti vantaggi:
- Disporre di funzionalità di ricerca e filtro rapide
- Eseguire aggiornamenti sul posto dei dati JSON senza dover sovrascrivere interi documenti
- Eseguire query, modificare e gestire in modo efficiente strutture di dati complesse
Se le tue applicazioni richiedono un'archiviazione dei dati dinamica e flessibile, JSON è la soluzione ideale. Inoltre, utilizzando JSON, puoi codificare set di dati complessi all'interno delle istanze Memorystore for Valkey senza utilizzare schemi. Puoi archiviare, accedere e aggiornare i dati nelle istanze e non devi gestire il codice personalizzato per serializzare e deserializzare i dati.
Un documento JSON è un formato di testo leggibile per archiviare e trasferire dati. Questo formato è costituito da coppie chiave-valore e tipi di dati strutturati. Il formato JSON ti consente di recuperare e aggiornare parti di un documento JSON senza dover manipolare l'intero oggetto. In questo modo, puoi migliorare il rendimento e ridurre i costi. Inoltre, il formato JSON è conforme a RFC 7159, allo standard di scambio di dati JSON ECMA-404 e a UTF-8 Unicode nel testo JSON.
Disponibilità
Se crei un'istanza Memorystore for Valkey, versione 8.0 e successive, la versione 1.0 del tipo di dati JSON e dei comandi associati è disponibile automaticamente. Questo tipo di dati è compatibile con l'API della versione 2 del modulo JSON. Inoltre, in base alla RFC 7159, l'elemento principale di un documento JSON può essere di qualsiasi tipo di dati JSON.
Proprietà JSON
JSON ha le seguenti proprietà:
Dimensioni massime del documento: per evitare potenziali problemi di memoria insufficiente dovuti a inserimenti dannosi o illimitati, puoi configurare un limite per le dimensioni delle singole chiavi JSON.
Per impostazione predefinita, il valore di questa proprietà è impostato su
0, il che significa che non esiste un limite alla dimensione del documento JSON. Per impostare questo limite, utilizza il comandoCONFIG SET json.max-document-size VALUE, dove VALUE è la dimensione massima del documento. Ad esempio, se specifichi4123456, la dimensione massima del documento è 4.123.456 byte (4 MB).Per vedere la quantità di memoria utilizzata da un valore JSON memorizzato in una chiave specificata, puoi utilizzare i comandi
JSON.DEBUG MEMORY KEYoMEMORY USAGE KEY. Per questi comandi, KEY è il nome della chiave in cui è memorizzato il valore JSON.Profondità massima: il livello di nidificazione massimo per gli oggetti e gli array JSON. Per saperne di più, consulta Limite di profondità di nidificazione massima.
Dimensione del documento JSON
Poiché un documento JSON viene archiviato internamente in un formato ottimizzato per l'accesso e la modifica rapidi, questo tipo di documento può consumare molta memoria. Per controllare la quantità di memoria utilizzata da un documento JSON, utilizza il comando
JSON.DEBUG MEMORY KEY, dove KEY è il nome della chiave che contiene il documento.
Categorie JSON
Per gestire l'accesso ai comandi JSON e ai dati, utilizza la categoria @json. Oltre a questa categoria, le seguenti categorie utilizzano i comandi JSON: @read, @write, @fast, @slow e @admin.
La seguente tabella indica se puoi mappare i comandi JSON alle categorie @read,
@write, @fast, @slow, @admin e @json.
| Comando JSON | @json |
@read |
@write |
@fast |
@slow |
@admin |
|---|---|---|---|---|---|---|
JSON.ARRAPPEND |
Y | N | Y | Y | N | N |
JSON.ARRINDEX |
Y | Y | N | Y | N | N |
JSON.ARRINSERT |
Y | N | Y | Y | N | N |
JSON.ARRLEN |
Y | Y | N | Y | N | N |
JSON.ARRPOP |
Y | N | Y | Y | N | N |
JSON.ARRTRIM |
Y | N | Y | Y | N | N |
JSON.CLEAR |
Y | N | Y | Y | N | N |
JSON.DEBUG |
Y | Y | N | N | Y | Y |
JSON.DEL |
Y | N | Y | Y | N | N |
JSON.FORGET |
Y | N | Y | Y | N | N |
JSON.GET |
Y | Y | N | Y | N | N |
JSON.MGET |
Y | Y | N | Y | N | N |
JSON.MSET |
Y | N | Y | N | Y | N |
JSON.NUMINCRBY |
Y | N | Y | Y | N | N |
JSON.NUMMULTBY |
Y | N | Y | Y | N | N |
JSON.OBJKEYS |
Y | Y | N | Y | N | N |
JSON.OBJLEN |
Y | Y | N | Y | N | N |
JSON.RESP |
Y | Y | N | Y | N | N |
JSON.SET |
Y | N | Y | N | Y | N |
JSON.STRAPPEND |
Y | N | Y | Y | N | N |
JSON.STRLEN |
Y | Y | N | Y | N | N |
JSON.TOGGLE |
Y | N | Y | Y | N | N |
JSON.TYPE |
Y | Y | N | Y | N | N |
Comandi JSON
Questa sezione elenca e descrive i comandi JSON che puoi utilizzare per eseguire operazioni sui documenti JSON.
| Comando | Descrizione |
|---|---|
JSON.ARRAPPEND |
Aggiungi uno o più valori JSON all'array nel percorso. |
JSON.ARRINDEX |
Cerca la prima occorrenza di un valore JSON scalare in un array. |
JSON.ARRINSERT |
Inserisci uno o più valori JSON in un array in un percorso prima dell'indice specificato. |
JSON.ARRLEN |
Recupera la lunghezza dell'array JSON nel percorso. |
JSON.ARRPOP |
Rimuove e restituisce un elemento da un indice nell'array. |
JSON.ARRTRIM |
Tronca un array nel percorso in modo che contenga solo l'intervallo inclusivo di elementi che specifichi. |
JSON.CLEAR |
Cancella gli array o un oggetto JSON in un percorso specificato. |
JSON.DEBUG |
Recupera informazioni su un documento JSON. Memorystore for Valkey
supporta i seguenti sottocomandi:
|
JSON.DELJSON.FORGET |
Elimina i valori JSON in un percorso specificato. |
JSON.GET |
Restituisce un valore in un percorso specificato in formato JSON serializzato. |
JSON.MGET |
Restituisce i valori in un percorso specificato da più chiavi di documenti. |
JSON.MSET |
Imposta più valori JSON in un percorso per più chiavi. |
JSON.NUMINCRBY |
Aumenta i valori numerici memorizzati in un percorso di un numero che specifica. |
JSON.NUMMULTBY |
Moltiplica i valori numerici memorizzati in un percorso per un numero che specifichi. |
JSON.OBJKEYS |
Recupera i nomi delle chiavi dagli oggetti JSON in un percorso specificato. |
JSON.OBJLEN |
Recupera il numero di chiavi in un oggetto JSON in un percorso specificato. |
JSON.RESP |
Restituisce il valore JSON di una chiave nel formato Redis Serialization Protocol (RESP). |
JSON.SET |
Imposta i valori JSON in un percorso specificato. |
JSON.STRAPPEND |
Aggiungi una stringa alle stringhe JSON in un percorso specificato. |
JSON.STRLEN |
Recupera la lunghezza dei valori delle stringhe JSON in un percorso specificato. |
JSON.TOGGLE |
Attiva/disattiva un valore booleano compreso tra true e
false. Questo valore viene memorizzato in un percorso specificato. |
JSON.TYPE |
Recupera il tipo di un valore JSON in un percorso specificato. |
Come Memorystore for Valkey interagisce con JSON
Questa sezione descrive in che modo Memorystore for Valkey interagisce con il tipo di dati JSON.
Più espressioni condizionali
Se sono presenti più espressioni condizionali per il filtraggio, Memorystore for Valkey le valuta nel seguente ordine:
- Operazioni tra parentesi
- L'espressione logica
AND(&&) - L'espressione logica
OR(||)
Limite massimo di profondità di annidamento
Quando un oggetto o un array JSON ha un elemento che è un altro oggetto o array JSON,
l'oggetto o l'array interno è nidificato all'interno dell'oggetto o dell'array esterno. Il limite massimo
di annidamento è 128. Pertanto, un valore come $.a.b.c.d... può raggiungere solo 128
livelli.
Se tenti di creare un documento JSON che contiene una profondità di nidificazione superiore a 128, Memorystore for Valkey rifiuta il documento e ricevi un errore. Tuttavia, puoi modificare questo limite utilizzando il comando CONFIG SET json.max-path-limit VALUE, dove
VALUE è il limite di profondità che vuoi.
Numeri JSON
In JSON, sia i numeri a virgola mobile sia gli interi sono chiamati numeri perché hanno lo stesso tipo di dati. Quando Memorystore for Valkey riceve un numero JSON, lo converte in una delle seguenti rappresentazioni binarie interne:
- Un numero in virgola mobile a precisione doppia IEEE a 64 bit
- Un numero intero a 64 bit con segno
JSON non conserva la stringa originale e tutta la sua formattazione. Quando Memorystore for Valkey restituisce un numero come parte di una risposta JSON, Memorystore for Valkey converte il numero dalla rappresentazione binaria interna a una stringa stampabile che utilizza regole di formattazione generiche.
Quando utilizzi i comandi JSON.NUMINCRBY e JSON.NUMMULTBY
con i numeri JSON, si applicano le seguenti condizioni:
- Se entrambi i numeri sono interi e il risultato non rientra nell'intervallo di
int64, il risultato diventa automaticamente un numero in virgola mobile a precisione doppia IEEE a 64 bit. - Se almeno uno dei numeri è un numero in virgola mobile, il risultato è un numero in virgola mobile a precisione doppia IEEE a 64 bit.
- Se il risultato supera l'intervallo del numero in virgola mobile a doppia precisione IEEE a 64 bit, riceverai un messaggio di errore
OVERFLOW.
Array diretti
Memorystore for Valkey filtra direttamente gli oggetti array. Ad esempio, se hai dati come
[0,1,2,3] e una query di percorso come$[?(@<3)], Memorystore for Valkey restituisce [0,1,2]. Per dati come {"my_valkey_key":[0,1,2,3]}
e una query di percorso come
$.my_valkey_key[?(@<3)],
Memorystore for Valkey restituisce anche [0,1,2].
Indici array
Memorystore for Valkey ti consente di utilizzare indici positivi e negativi per gli array. A questi tipi di indici si applicano le seguenti condizioni:
- Indice positivo: i numeri iniziano dall'inizio dell'array. Ad esempio, se un array ha un indice positivo di tre, 0 esegue query sul primo elemento, 1 sul secondo e 2 sul terzo.
- Indice negativo: i numeri iniziano dalla fine dell'array. Se un array ha un indice negativo di tre, -1 esegue una query sul terzo elemento, -2 sul secondo elemento e -3 sul primo elemento.
Memorystore for Valkey non arrotonda gli indici per eccesso o per difetto. Se hai un array con una lunghezza di 3 e chiami un indice positivo maggiore di 3 o un indice negativo minore di -3, Memorystore for Valkey non restituisce un risultato.
Sintassi per i percorsi JSON
Non puoi utilizzare una sintassi non valida per i percorsi JSON. Questa condizione si applica anche se un sottoinsieme di un percorso JSON con una sintassi non valida contiene un percorso valido.