如何在redis中复制mysql的左连接,内连接,并集

时间:2013-05-27 22:32:47

标签: mysql node.js redis cross-reference node-redis

我认为交叉反思是一种很好的学习方式。我对redis进行了一些研究,并认为作为无sc数据库的redis没有表格。它取代了表,它有键值,键列表,键集和键排序集(zset)。

这种关键数据对结构对我来说太陌生了。我更习惯于mysql,sql样式的数据库。

我得到了一个sqlFiddle here,它展示了一个简单的内连接示例。

我只是从sql中获取这些数据并将其重新建模为一个有意义的JSON对象,如下所示:

var posts = {
    users: [{
        userid: 1,
        posts: [{
            header: "header1",
            content: "content of header1"
        },{
            header: "header2",
            content: "content of header2"
        },{
            header: "header3",
            content: "content of header3"
        }]
    },{
        userid: 2,
        posts: [{
            header: "header4",
            content: "content of header4"
        }]
    }]
}

我的问题是:

如何在redis和node.js上模仿这种表结构? 是否有用于foraign键的redis命令的内置版本? 如果我没有选择,只能使用应用程序级数据重新建模,那么如何正确地进行这种过程。

PS:交叉重新安排的例子和有用的文章将会受到影响。

修改 是否可以通过Redis的SINTER命令进行连接操作?

1 个答案:

答案 0 :(得分:1)

Redis是一个键值存储,而不是关系数据库。因此,没有可保持实体关系的本机功能。如果你想要它,你必须将它写入你的应用程序。

我能想到的最接近的是你在Mongoose.js模块中找到的东西。 Mongoose定义了一个Schema,它定义了用于格式化和验证MongoDB获取/保存的文档的字段,还允许subdocs 可能开始模仿实体之间的关系。

...但考虑到Redis内置了记录过期/ TTL功能,这些记录存储在RAM中,它是一个键值存储......它感觉到尝试这个的错误的努力。甚至Mongoose也没有提供强制集合之间的参照完整性的功能,并且限制有助于通过其Schema提高验证/输入的记录一致性。