¿Trabajando con objetos anidados en Redis?

Digamos que tengo un hash donde una propiedad anidada podría cambiar.

"key1": {
  "prop1": {
    "subprop1": "could_change"
  }
}

Si me envían la información que prop1.subprop1 ha cambiado, ¿puedo realizar actualizaciones atómicas en esta propiedad? Ahora node_redis ahorra prop1 como una cadena que dice '[object Object]'. Si hago JSON.stringify() el obj, entonces necesitaría recuperar el objeto, analizarlo en el objeto en la memoria, hacer la edición y luego encadenar y guardar el objeto, sin saber si algo ha cambiado mientras tanto.

Si debería estar trabajando con estos datos de una manera diferente, ¿alguien podría explicarme? Tengo un objeto con muchos atributos anidados que necesito para poder actualizar partes, además de necesitar recuperarlo como un objeto completo.

Gracias por cualquier ayuda!

preguntado el 22 de mayo de 12 a las 15:05

1 Respuestas

Las secuencias de comandos de Lua o un patrón de bloqueo resolverían su problema.

EVAL 'local obj = cjson.decode(redis.call("GET", "key1")); obj.prop1.subprop1 = ARGV[1]; redis.call("SET", "key1", cjson.encode(obj));' 0 "did_change"

Incluso podría hacer algo más avanzado en Lua para editar los subobjetos JSON de cualquier tecla si quisiera.

Mira el Documentos de comando Redis SETNX para ver un ejemplo de cómo usar un candado.

contestado el 22 de mayo de 12 a las 23:05

Nota: Las secuencias de comandos de Lua solo están disponibles con Redis 2.6 o superior. - didier spezia

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.