ioredis - Guardar hash anidado en redis a través de una aplicación node.js
redis tutorial (2)
Estoy usando node_redis y me gustaría guardar una estructura como:
{
users :
"alex" : { "email" : "[email protected]",
"password" : "alex123"},
"sandra" : { "email" : "[email protected]",
"password" : "sandra123"},
...
}
Actualmente, para cada usuario creo un objeto JSON:
jsonObj = { "email" : "[email protected]",
"password" : "alex123"}
y hacer un
db.hmset("alex", JSON.stringify(jsonObj))
¿Es posible incrustar esta estructura en otra estructura (la de los usuarios?) ¿Cómo podría configurar los usuarios ["alex"] con esta estructura?
Podría almacenar la subestructura como un objeto y almacenar su id dentro de la estructura principal, más bien como un puntero. Entonces, dado tu ejemplo, yo haría lo siguiente
{
users :
"alex" : { "email" : "[email protected]",
"password" : "alex123"},
"sandra" : { "email" : "[email protected]",
"password" : "sandra123"},
...
}
$x = incr idx:user
hmset user:$x email [email protected] password alex123
sadd list:user $x
$x = incr idx:user
hmset user:$x email [email protected] password sandra123
sadd list:user $x
Espero que esta posible solución ayude.
Por lo que sé, no hay soporte nativo para estructuras anidadas en Redis, pero se pueden modelar, por ejemplo, con set + hash (similar a los árboles jerárquicos ). Hashes son probablemente más adecuados para almacenar campos y valores de un solo objeto JSON. Lo que haría es almacenar cada usuario con un prefijo (que es una convention Redis), por ejemplo:
db.hmset("user:alex", JSON.stringify(jsonObj));
y luego usar sets para agrupar usuarios en un conjunto con una clave llamada users
. Luego puedo obtener todas las claves de los usuarios mediante el comando smembers y acceder a cada una de ellas individualmente con hgetall .