mysql - mysql的left join, inner join, union如何在redis中复制

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

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

PS:交叉引用的例子和有用的文章会被标出。

编辑: Redis 的 SINTER 命令可以完成类似 join 的操作吗?

最佳答案

Redis 是键值存储,而不是关系数据库。因此,不存在维护实体关系的 native 函数。如果您需要,您必须将其写入您的应用。

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

...但是考虑到 Redis 具有内置的记录过期/TTL 功能,记录存储在 RAM 中,它是一个键值存储...尝试这样做感觉是一种错误的努力。甚至 Mongoose 也不提供在集合和限制之间强制执行引用完整性的功能,这有助于通过其架构提高记录的验证/输入一致性。

关于mysql - mysql的left join, inner join, union如何在redis中复制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16781347/

相关文章:

redis - 我可以根据redis服务器的当前系统时间在redis中设置一个值吗?

ruby-on-rails - Rails ActionCable 中出现 "Unable to find subscription with identifier"的原因是什么?

python - Redis lua 脚本 - 用 Ruby 编写的 lua 脚本的 python 等价物是什么?

mysql - 无法在 SQL 中显示正确的列表

node.js - 路径 "{ _id: 5bd587cffb6fc074abb12cb8,\n name:\' 处的值\',\n year:\' name 2\',\n id:\' 4\' }"102 "winner"转换为字符串失败

mysql - 将字符串的元素拆分为多个列

sql-server - 连接错误: Failed to connect to localhost:undefined in 15000ms

node.js - 如何将 Assets 从 node.js 上传到 github 版本

mysql - MySQL 如何处理并发插入?

mysql - MySQL Workbench 需要服务器才能运行吗?