我应该如何将这个对象存储在Redis中?

parent = { child0: { data1:'foo', data2: 'bar' }, child1: { data1:'foo', data2: 'bar' }, child2: { data1:'foo', data2: 'bar' } } 

起初我以为我会设置一个parent:child钥匙,因为我将需要它的兄弟姐妹个人的数据。 但在某些情况下,我将需要返回父代中的所有数据。

我应该把整个对象放在parent键中吗?

如果有很多获得和设置可能只是其中的一个孩子,这是否有缺点?

有没有办法用parent:child模式调用所有父数据?

谢谢!

       

网上收集的解决方案 "我应该如何将这个对象存储在Redis中?"

试试哈希 – 让你HGET得到一个孩子和HGETALL得到他们所有。

将整个对象作为JSON存储在单个键中也是有效的,并且如果您的使用情况非常合适,则可以使您的代码变得简单。 如果数字不是太大,即使只需要显示一个子对象,也总是可以检索整个对象。

避免将复杂对象存储在单个键中的主要原因是写冲突 – 如果两个连接可以同时修改一个对象的不同子对象,那么散列将更加麻烦。

您可以考虑利用散列数据types。 使用父项作为散列的关键字,并为所有子项使用(HGET键字段)或(HKEYS键)。

如果有人会发布散列命令HSET和HGET的基准,这将是有趣的。 列表操作的基准(LPUSH 88109.25 / sec)比(SET 114293.71 / sec)慢了(〜23%)。 尽pipe列出了O(1),但HSET仍然较慢。

所以我认为你可以通过在你的代码中查看完整的家庭请求与个别子请求的比例来加速优化决策。