JavaScript Object Notation (JSON) vous permet de stocker et de manipuler efficacement des données structurées dans Memorystore pour Valkey. L'utilisation de JSON présente les avantages suivants :
- Disposer de fonctionnalités de recherche et de filtrage rapides
- Effectuer des mises à jour sur place des données JSON sans avoir à écraser des documents entiers
- Interroger, modifier et gérer efficacement des structures de données complexes
Si vos applications nécessitent un stockage de données dynamique et flexible, le format JSON est idéal pour vous. De plus, en utilisant JSON, vous pouvez encoder des ensembles de données complexes dans des instances Memorystore pour Valkey sans utiliser de schémas. Vous pouvez stocker, accéder et mettre à jour les données dans les instances, sans avoir à gérer de code personnalisé pour sérialiser et désérialiser les données.
Un document JSON est un format de texte lisible par l'humain permettant de stocker et de transporter des données. Ce format se compose de paires clé/valeur et de types de données structurées. Le format JSON vous permet de récupérer et de mettre à jour des parties d'un document JSON sans avoir à manipuler l'intégralité de l'objet. Cela peut améliorer vos performances et réduire vos coûts. De plus, le format JSON est conforme à la norme RFC 7159, à la norme d'échange de données JSON ECMA-404 et à l'Unicode UTF-8 dans le texte JSON.
Disponibilité
Si vous créez une instance Memorystore pour Valkey version 8.0 ou ultérieure, la version 1.0 du type de données JSON et des commandes associées est disponible automatiquement. Ce type de données est compatible avec la version 2 du module JSON. De plus, conformément à la RFC 7159, l'élément racine d'un document JSON peut être de n'importe quel type de données JSON.
Propriétés JSON
JSON présente les propriétés suivantes :
Taille maximale des documents : pour éviter d'éventuels problèmes de mémoire insuffisante liés à des insertions malveillantes ou illimitées, vous pouvez configurer une limite de taille pour les clés JSON individuelles.
Par défaut, la valeur de cette propriété est définie sur
0, ce qui signifie qu'il n'y a pas de limite à la taille du document JSON. Pour définir cette limite, utilisez la commandeCONFIG SET json.max-document-size VALUE, où VALUE correspond à la taille maximale du document. Par exemple, si vous spécifiez4123456, la taille maximale du document est de 4 123 456 octets (4 Mo).Pour connaître la quantité de mémoire utilisée par une valeur JSON stockée dans une clé spécifiée, vous pouvez utiliser les commandes
JSON.DEBUG MEMORY KEYouMEMORY USAGE KEY. Pour ces commandes, KEY correspond au nom de la clé où la valeur JSON est stockée.Profondeur max : niveau d'imbrication maximal pour les objets et les tableaux JSON. Pour en savoir plus, consultez Limite de profondeur d'imbrication maximale.
Taille du document JSON
Étant donné qu'un document JSON est stocké en interne dans un format optimisé pour un accès et une modification rapides, ce type de document peut consommer beaucoup de mémoire. Pour vérifier la quantité de mémoire consommée par un document JSON, utilisez la commande JSON.DEBUG MEMORY KEY, où KEY est le nom de la clé contenant le document.
Catégories JSON
Pour gérer l'accès aux commandes JSON et aux données, utilisez la catégorie @json. En plus de cette catégorie, les catégories suivantes utilisent des commandes JSON : @read, @write, @fast, @slow et @admin.
Le tableau suivant indique si vous pouvez mapper des commandes JSON aux catégories @read, @write, @fast, @slow, @admin et @json.
| Commande JSON | @json |
@read |
@write |
@fast |
@slow |
@admin |
|---|---|---|---|---|---|---|
JSON.ARRAPPEND |
O | N | O | O | N | N |
JSON.ARRINDEX |
O | O | N | O | N | N |
JSON.ARRINSERT |
O | N | O | O | N | N |
JSON.ARRLEN |
O | O | N | O | N | N |
JSON.ARRPOP |
O | N | O | O | N | N |
JSON.ARRTRIM |
O | N | O | O | N | N |
JSON.CLEAR |
O | N | O | O | N | N |
JSON.DEBUG |
O | O | N | N | O | O |
JSON.DEL |
O | N | O | O | N | N |
JSON.FORGET |
O | N | O | O | N | N |
JSON.GET |
O | O | N | O | N | N |
JSON.MGET |
O | O | N | O | N | N |
JSON.MSET |
O | N | O | N | O | N |
JSON.NUMINCRBY |
O | N | O | O | N | N |
JSON.NUMMULTBY |
O | N | O | O | N | N |
JSON.OBJKEYS |
O | O | N | O | N | N |
JSON.OBJLEN |
O | O | N | O | N | N |
JSON.RESP |
O | O | N | O | N | N |
JSON.SET |
O | N | O | N | O | N |
JSON.STRAPPEND |
O | N | O | O | N | N |
JSON.STRLEN |
O | O | N | O | N | N |
JSON.TOGGLE |
O | N | O | O | N | N |
JSON.TYPE |
O | O | N | O | N | N |
Commandes JSON
Cette section liste et décrit les commandes JSON que vous pouvez utiliser pour effectuer des opérations sur des documents JSON.
| Commande | Description |
|---|---|
JSON.ARRAPPEND |
Ajoute une ou plusieurs valeurs JSON au tableau au niveau du chemin d'accès. |
JSON.ARRINDEX |
Recherchez la première occurrence d'une valeur JSON scalaire dans un tableau. |
JSON.ARRINSERT |
Insérez une ou plusieurs valeurs JSON dans un tableau à un chemin d'accès avant l'index que vous spécifiez. |
JSON.ARRLEN |
Récupère la longueur du tableau JSON au niveau du chemin d'accès. |
JSON.ARRPOP |
Supprime et renvoie un élément à partir d'un index dans le tableau. |
JSON.ARRTRIM |
Supprimez les éléments d'un tableau au niveau du chemin d'accès pour qu'il ne contienne que la plage inclusive d'éléments que vous spécifiez. |
JSON.CLEAR |
Efface les tableaux ou un objet JSON à un chemin que vous spécifiez. |
JSON.DEBUG |
Récupérez des informations sur un document JSON. Memorystore pour Valkey
est compatible avec les sous-commandes suivantes :
|
JSON.DELJSON.FORGET |
Supprime les valeurs JSON à un chemin que vous spécifiez. |
JSON.GET |
Renvoie une valeur à un chemin que vous spécifiez au format JSON sérialisé. |
JSON.MGET |
Renvoie les valeurs d'un chemin que vous spécifiez à partir de plusieurs clés de document. |
JSON.MSET |
Définissez plusieurs valeurs JSON sur un chemin d'accès à plusieurs clés. |
JSON.NUMINCRBY |
Incrémente les valeurs numériques stockées dans un chemin d'accès d'un nombre que vous spécifiez. |
JSON.NUMMULTBY |
Multipliez les valeurs numériques stockées dans un chemin d'accès par un nombre que vous spécifiez. |
JSON.OBJKEYS |
Récupérez les noms de clés à partir d'objets JSON à un chemin que vous spécifiez. |
JSON.OBJLEN |
Récupérez le nombre de clés dans un objet JSON à un chemin que vous spécifiez. |
JSON.RESP |
Renvoie la valeur JSON d'une clé au format Redis Serialization Protocol (RESP). |
JSON.SET |
Définissez des valeurs JSON à un chemin d'accès que vous spécifiez. |
JSON.STRAPPEND |
Ajoutez une chaîne à des chaînes JSON à un chemin que vous spécifiez. |
JSON.STRLEN |
Récupérez la longueur des valeurs de chaîne JSON à un chemin que vous spécifiez. |
JSON.TOGGLE |
Basculez une valeur booléenne entre true et false. Cette valeur est stockée à un chemin d'accès que vous spécifiez. |
JSON.TYPE |
Récupérez le type d'une valeur JSON à un chemin que vous spécifiez. |
Interaction de Memorystore pour Valkey avec JSON
Cette section décrit comment Memorystore pour Valkey interagit avec le type de données JSON.
Expressions conditionnelles multiples
Si plusieurs expressions conditionnelles sont utilisées pour le filtrage, Memorystore pour Valkey les évalue dans l'ordre suivant :
- Opérations entre parenthèses
- Expression logique
AND(&&) - Expression logique
OR(||)
Limite de profondeur d'imbrication maximale
Lorsqu'un objet ou un tableau JSON contient un élément qui est lui-même un objet ou un tableau JSON, l'objet ou le tableau interne est imbriqué dans l'objet ou le tableau externe. La limite de profondeur d'imbrication est de 128. Ainsi, une valeur telle que $.a.b.c.d... ne peut atteindre que 128 niveaux.
Si vous essayez de créer un document JSON dont la profondeur d'imbrication est supérieure à 128, Memorystore pour Valkey le refuse et vous recevez un message d'erreur. Toutefois, vous pouvez ajuster cette limite à l'aide de la commande CONFIG SET json.max-path-limit VALUE, où VALUE correspond à la limite de profondeur souhaitée.
Nombres JSON
En JSON, les nombres à virgule flottante et les entiers sont appelés nombres, car ils ont le même type de données. Lorsque Memorystore pour Valkey reçoit un nombre JSON, il le convertit en l'une des représentations binaires internes suivantes :
- Nombre à virgule flottante IEEE à double précision de 64 bits
- Entier signé de 64 bits
JSON ne conserve pas la chaîne d'origine ni sa mise en forme. Lorsque Memorystore pour Valkey génère un nombre dans une réponse JSON, il le convertit de la représentation binaire interne en une chaîne imprimable qui utilise des règles de mise en forme génériques.
Lorsque vous utilisez les commandes JSON.NUMINCRBY et JSON.NUMMULTBY avec des nombres JSON, les conditions suivantes s'appliquent :
- Si les deux nombres sont des entiers et que le résultat est hors de la plage de
int64, le résultat devient automatiquement un nombre à virgule flottante à double précision IEEE de 64 bits. - Si au moins l'un des nombres est un nombre à virgule flottante, le résultat est un nombre à virgule flottante IEEE à double précision de 64 bits.
- Si le résultat dépasse la plage du nombre à virgule flottante à double précision IEEE de 64 bits, vous recevez un message d'erreur
OVERFLOW.
Tableaux directs
Memorystore pour Valkey filtre directement les objets du tableau. Par exemple, si vous disposez de données telles que
[0,1,2,3] et d'une requête de chemin d'accès telle que$[?(@<3)], Memorystore pour Valkey renvoie [0,1,2]. Pour des données telles que {"my_valkey_key":[0,1,2,3]} et une requête de chemin d'accès telle que
$.my_valkey_key[?(@<3)], Memorystore pour Valkey renvoie également [0,1,2].
Index de tableau
Memorystore pour Valkey vous permet d'utiliser des index positifs et négatifs pour les tableaux. Les conditions suivantes s'appliquent à ces types d'index :
- Index positif : les nombres commencent au début du tableau. Par exemple, si un tableau a un index positif de trois, 0 interroge le premier élément, 1 interroge le deuxième élément et 2 interroge le troisième élément.
- Index négatif : les nombres commencent à la fin du tableau. Si un tableau comporte un index négatif de trois, -1 interroge le troisième élément, -2 interroge le deuxième élément et -3 interroge le premier élément.
Memorystore pour Valkey n'arrondit pas les index à la hausse ni à la baisse. Si vous disposez d'un tableau de longueur 3 et que vous appelez un index positif supérieur à 3 ou un index négatif inférieur à -3, Memorystore pour Valkey ne renvoie aucun résultat.
Syntaxe des chemins d'accès JSON
Vous ne pouvez pas utiliser de syntaxe non valide pour vos chemins JSON. Cette condition s'applique même si un sous-ensemble d'un chemin JSON avec une syntaxe non valide contient un chemin valide.