4

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

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

如果我收到prop1.subprop1已更改的信息,我可以对此属性执行原子更新吗?现在node_redis保存prop1为一个字符串,上面写着'[object Object]'. 如果我 JSON.stringify() obj 那么我需要检索对象,解析为内存中的对象,进行编辑,然后字符串化并保存对象——同时不知道是否有任何变化。

如果我应该以不同的方式处理这些数据,有人可以解释一下吗?我有一个具有可能嵌套属性的对象,除了需要作为整个对象检索之外,我还需要能够更新其中的一部分。

谢谢你的帮助!

4

1 回答 1

6

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"

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

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

于 2012-05-22T22:21:14.913 回答