Informazioni su JSON

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 comando CONFIG SET json.max-document-size VALUE, dove VALUE è la dimensione massima del documento. Ad esempio, se specifichi 4123456, 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 KEY o MEMORY 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:
  • MEMORY: segnala la memoria utilizzata di un valore in byte.
  • DEPTH: segnala la profondità massima del percorso di un documento JSON.
  • FIELDS: segnala il numero di campi all'interno di un elemento JSON. Questo elemento è archiviato in una chiave che specifichi.
  • HELP: restituisce informazioni utili sul comando JSON.DEBUG.
JSON.DEL
JSON.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:

  1. Operazioni tra parentesi
  2. L'espressione logica AND (&&)
  3. 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
&lbrack;0,1,2,3&rbrack; e una query di percorso come$[?(@<3)], Memorystore for Valkey restituisce &lbrack;0,1,2&rbrack;. 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 &lbrack;0,1,2&rbrack;.

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.