redis newbie: ¿cómo crear hash dentro de un hash?


12

Quiero crear este tipo de estructura en redis: (son básicamente datos json)

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

Lo que he probado hasta ahora:

He intentado crear un hash sin los hashes "sub", solo para asegurarme de que tengo los elementos básicos. Así que esto es lo que comencé con el 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

Eso parece funcionar. Puedo ver que tengo 2 "registros" de datos de widgets en una colección de widgets.

Pero mi intento de crear un registro con los datos de r1 falla.

Esto es lo que probé:

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

Esto crea una clave hash "r1 {extid" con un valor hash de "50000}"

Cualquier sugerencia sera apreciada. Creo que mi problema es mi jerga. Simplemente no sé lo suficiente sobre la sintaxis de redis para saber qué palabras usar en mi búsqueda de google.

Quizás solo tenga que "aplanar" los datos de esta manera:

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

Gracias.

Respuestas:


14

Redis no es compatible con estructuras de datos anidados, y específicamente no es compatible con un Hash dentro de un Hash :) Básicamente puede elegir entre dos opciones: serializar el Hash interno y almacenarlo en un campo Hash o usar otra tecla Hash y solo mantén una referencia en un campo del Hash externo.


Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.