redis newbie - comment créer du hachage dans un hachage?

12

Je veux créer ce type de structure dans redis: (ses données essentiellement json)

{
    "id": "0001",
    "name":"widget ABC",
    "model": "model123",
    "service":"standard",
    "admin_password": 82616416,
    "r1":
        {
            "extid":"50000",
            "password":"test123",
        },
    "r2":
        {
            "ext":"30000",
            "password":"test123",
        },
}

Ce que j'ai essayé jusqu'à présent:

J'ai essayé de créer un hachage sans les "sous" hachages, juste pour m'assurer que j'ai les bases en bas. Voici donc ce que j'ai commencé avec le redis-cli:

HMSET widget:1 id 0001 name 'widget ABC' model 'model123' service standard admin_password 82616416
HMSET widget:2 id 0002 name 'widget ABC' model 'model123' service standard admin_password 12341234

Cela semble fonctionner. Je peux voir que j'ai 2 "enregistrements" de données de widget dans une collection de widgets.

Mais ma tentative de créer un enregistrement avec les données r1 échoue.

Voici ce que j'ai essayé:

HMSET widget:3 id 0002 name 'widget ABC' model 'model123' service standard admin_password 12341234 r1{extid 50000} 

Cela crée une clé de hachage "r1 {extid" avec une valeur de hachage de "50000}"

Toute suggestion serait appréciée. Je pense que mon problème est mon jargon. Je ne connais pas suffisamment la syntaxe redis pour savoir quels mots utiliser dans ma recherche Google.

Peut-être que je dois juste "aplatir" les données comme ceci:

HMSET widget:3 id 0002 name 'widget ABC' model 'model123' service standard admin_password 12341234 r1_extid 50000 r1_password test123 r2_extid 30000 r2_password test123

Merci.

Happydevdays
la source

Réponses:

14

Redis ne prend pas en charge les structures de données imbriquées, et en particulier il ne prend pas en charge un hachage à l'intérieur d'un hachage :) Vous avez essentiellement le choix entre deux options: soit sérialiser le hachage interne et le stocker dans un champ de hachage ou utiliser une autre clé de hachage et il suffit d'en garder une référence dans un champ du hachage extérieur.

Itamar Haber
la source
1

Je suggère ReJSON . Il est conçu pour gérer exactement ces problèmes.

Vous pouvez utiliser la notation de chemin pour accéder aux éléments imbriqués.

Cihan B.
la source