在Redis中使用嵌套对象?

fan*_*ncy 4 redis node.js

假设我有一个嵌套属性可以更改的哈希.

"key1": {
  "prop1": {
    "subprop1": "could_change"
  }
}
Run Code Online (Sandbox Code Playgroud)

如果我收到了prop1.subprop1已更改的信息,我可以在此属性上预先形成原子更新吗?现在node_redis保存prop1为一个字符串说'[object Object]'.如果我JSON.stringify()obj然后我需要检索对象,解析内存中的对象,进行编辑,然后进行字符串化并保存对象 - 不知道某些东西是否在平均时间内发生了变化.

如果我以不同的方式处理这些数据,有人可以解释一下吗?我有一个可能嵌套属性的对象,我需要能够更新部分,除了需要检索整个对象.

谢谢你的帮助!

小智 7

Lua脚本或锁定模式可以解决您的问题.

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

如果你愿意,甚至可以在Lua中创建更高级的东西来编辑任何键的JSON子对象.

查看Redis SETNX命令文档,了解如何使用锁定的示例.