Javascript 我应该如何在Redis中存储此对象?

Javascript 我应该如何在Redis中存储此对象?,javascript,json,node.js,redis,Javascript,Json,Node.js,Redis,起初,我想我应该设置一个parent:child键,因为我需要它的兄弟姐妹单独的数据。但在某些情况下,我需要返回父级中的所有数据 我应该把整个对象放在父项中吗 如果大量的get和set可能只针对它的一个孩子,那么这会有负面影响吗 是否有一种方法可以使用parent:childschema调用所有父数据 谢谢 试试散列-这样你就可以得到一个孩子,然后得到所有的孩子 不过,将整个对象作为JSON存储在一个键中也是有效的,如果使用得当,可以使代码保持简单。如果数字不太大,即使只需要显示一个子对象,也可

起初,我想我应该设置一个
parent:child
键,因为我需要它的兄弟姐妹单独的数据。但在某些情况下,我需要返回父级中的所有数据

我应该把整个对象放在
父项中吗

如果大量的get和set可能只针对它的一个孩子,那么这会有负面影响吗

是否有一种方法可以使用
parent:child
schema调用所有父数据


谢谢

试试散列-这样你就可以得到一个孩子,然后得到所有的孩子

不过,将整个对象作为JSON存储在一个键中也是有效的,如果使用得当,可以使代码保持简单。如果数字不太大,即使只需要显示一个子对象,也可以始终检索整个对象


避免将复杂对象存储在单个键中的主要原因是写冲突——如果两个连接可以同时修改一个对象的不同子对象,则哈希将不会那么麻烦

> P>您可以考虑利用哈希数据类型。将父项用作哈希的键,并对特定子项使用(HGET key字段),或对所有子项使用(HKEYS key)

如果有人发布hash命令HSET和HGET的基准测试,那将很有趣。列表操作(LPUSH 88109.25/秒)的基准测试速度较慢(~23%)(设置为114293.71/秒)。虽然列出了O(1),但推测HSET仍然较慢


因此,我认为您可以通过查看代码中完整家庭请求与单个子请求的比率来加速优化决策。

Ahh,是的,所有子对象都将同时被编辑。我应该在一个键上尽可能避免这种情况?是的-redis速度很快,不太可能发生冲突,但它们至少会在最不方便的时候发生,并导致很难找到bug。对于散列或多个键,每个项都是独立的,因此冲突是不可能的。啊,好吧,那么如果我使用散列功能,当两个不同的子项同时被更改时,冲突将得到缓解?对,因为redis使用单独的原子命令来处理它们,所以您只需处理两个用户修改同一子项的可能性,这不太可能。谢谢你的建议。如果子进程本质上是同时设置的呢。HGET/HSET能处理这些差异吗?虽然我最初以为您在谈论事务,但我认为在同时设置多个散列值(子项)时,HMSET命令正是您所需要的。
parent = {
    child0: {
        data1:'foo',
        data2: 'bar'
    },
    child1: {
        data1:'foo',
        data2: 'bar'
    },
    child2: {
        data1:'foo',
        data2: 'bar'   
    }
}