假设我有一个嵌套属性可以更改的哈希。
"key1": {
"prop1": {
"subprop1": "could_change"
}
}
如果我收到prop1.subprop1
已更改的信息,我可以在此属性上预先形成原子更新吗?现在node_redis
将prop1
保存为'[object Object]'
字符串。如果我JSON.stringify()obj然后我需要检索对象,解析内存中的对象,进行编辑,然后字符串化并保存对象 - 不知道某些事情是否在平均时间内发生了变化。
如果我以不同的方式处理这些数据,有人可以解释一下吗?我有一个可能嵌套属性的对象,除了需要检索整个对象外,还需要能够更新部分属性。
感谢您的帮助!
答案 0 :(得分: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"
如果你愿意,甚至可以在Lua中制作更高级的内容来编辑任何键的JSON子对象。
查看Redis SETNX command docs以获取如何使用锁定的示例。