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

时间:2011-09-14 22:30:08

标签: javascript json node.js redis

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

起初我以为我会设置parent:child密钥,因为我需要单独为其兄弟姐妹提供数据。但在某些情况下,我需要返回父级内的所有数据。

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

如果很多获取和套装可能仅适用于其中一个孩子,那么它是否存在缺点?

有没有办法用parent:child架构调用所有父数据?

谢谢!

2 个答案:

答案 0 :(得分:2)

尝试一个哈希 - 让你只有一个孩子获得HGET,而获得所有孩子的是HGETALL。

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

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

答案 1 :(得分:0)

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

如果有人发布散列命令HSET和HGET的基准测试,那将会很有趣。列表操作的基准(LPUSH 88109.25 /秒)虽然(SET 114293.71 /秒)慢了(~23%)。据推测,尽管列出了O(1),HSET仍然较慢。

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