À propos de JSON

JavaScript Object Notation (JSON) vous permet de stocker et de manipuler efficacement des données structurées dans Memorystore for Redis Cluster. 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, JSON est le choix idéal pour vous. De plus, en utilisant JSON, vous pouvez encoder des ensembles de données complexes dans des clusters Memorystore pour Redis Cluster sans utiliser de schémas. Vous pouvez stocker, accéder et mettre à jour les données dans les clusters, 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 un cluster dans Memorystore for Redis Cluster, 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 commande CONFIG SET json.max-document-size VALUE, où VALUE correspond à la taille maximale du document. Par exemple, si vous spécifiez 4123456, 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 KEY ou MEMORY 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 for Redis Cluster est compatible avec les sous-commandes suivantes :
  • MEMORY : indique l'utilisation de la mémoire d'une valeur en octets.
  • DEPTH : indique la profondeur maximale du chemin d'accès d'un document JSON.
  • FIELDS : indique le nombre de champs dans un élément JSON. Cet élément est stocké à une clé que vous spécifiez.
  • HELP : renvoie des informations utiles sur la commande JSON.DEBUG.
JSON.DEL
JSON.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 for Redis Cluster avec JSON

Cette section décrit comment Memorystore pour Redis Cluster interagit avec le type de données JSON.

Expressions conditionnelles multiples

Si plusieurs expressions conditionnelles sont utilisées pour le filtrage, Memorystore for Redis Cluster les évalue dans l'ordre suivant :

  1. Opérations entre parenthèses
  2. Expression logique AND (&&)
  3. 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 Redis Cluster 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 for Redis Cluster 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 Redis Cluster 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 for Redis Cluster filtre directement les objets de tableaux. Par exemple, si vous disposez de données telles que
&lbrack;0,1,2,3&rbrack; et d'une requête de chemin d'accès telle que$[?(@<3)], Memorystore pour Redis Cluster renvoie &lbrack;0,1,2&rbrack;. 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 for Redis Cluster renvoie également &lbrack;0,1,2&rbrack;.

Index de tableau

Memorystore for Redis Cluster 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 for Redis Cluster n'arrondit pas les index. 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 for Redis Cluster 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.