【问题标题】:How are left join, inner join, union of mysql can be replicated in redismysql的left join、inner join、union如何在redis中复制
【发布时间】:2013-05-27 22:32:46
【问题描述】:

我认为交叉引用是一种很好的学习方式。我对redis进行了一些研究,它表明作为一个无耻的数据库redis没有表。它有 key-value、key-list、key-set 和 key-sortedset(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 上模仿这种表结构? 是否有用于外键的 redis 命令的构建? 如果我别无选择,只能使用应用级数据重新建模,那么执行这种过程的正确方法是什么。

PS:交叉引用示例和有用的文章将被引用。

编辑: 是否可以通过 Redis 的 SINTER 命令完成类似连接的操作?

【问题讨论】:

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


    【解决方案1】:

    Redis 是键值对存储,而不是关系数据库。因此,没有可以维护实体关系的本机函数。如果你想要它,你必须把它写到你的应用程序中。

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

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

    【讨论】:

    • 哇。看看那个刚刚开始职业生涯的年轻开发者。他对刚刚进入的新世界充满了梦想和许多疑问。发展的世界。并感谢您为他提供的帮助。在这里,我猜你在 7 年后获得了“接受的答案”积分。
    猜你喜欢
    • 2018-07-10
    • 1970-01-01
    • 1970-01-01
    • 2016-12-14
    • 2012-09-10
    • 2015-11-29
    • 2020-03-07
    相关资源
    最近更新 更多