redis newbie - come creare l'hash all'interno di un hash?


12

Voglio creare questo tipo di struttura in redis: (i suoi dati sostanzialmente json)

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

Quello che ho provato finora:

Ho provato a creare un hash senza gli hash "sub", solo per assicurarmi di avere le basi. Quindi, ecco cosa ho iniziato dal 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

Sembra funzionare. Vedo che ho 2 "record" di dati widget in una raccolta widget.

Ma il mio tentativo di creare un record con i dati r1 fallisce.

Questo è quello che ho provato:

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

Questo crea una chiave hash "r1 {extid" con un valore hash di "50000}"

Tutti i suggerimenti sarebbero apprezzati. Penso che il mio problema sia il mio gergo. Non so abbastanza della sintassi di Redis per sapere quali parole usare nella mia ricerca su Google.

Forse devo solo "appiattire" i dati in questo modo:

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

Grazie.

Risposte:


14

Redis non supporta le strutture di dati nidificati, e in particolare non supporta un hash all'interno di un hash :) In pratica è possibile scegliere tra due opzioni: serializzare l'hash interno e memorizzarlo in un campo hash o utilizzare un altro tasto hash e basta tenerne un riferimento in un campo dell'Hash esterno.


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.