当前位置:  开发笔记 > 后端 > 正文

如何在Redis中查询和表示对象/哈希之间的关系

如何解决《如何在Redis中查询和表示对象/哈希之间的关系》经验,为你挑选了1个好方法。

让我们假设我有一个有文章和作者的应用程序.它将数据保存在Redis基础中.这些文章存储为哈希,如下面以JSON语法表示的那样:

{ "title" : "My title", "content" : "This is a content", "authorId" : 1}

另外,我的作者用哈希代表:

{ "name": "John Smith", "username" : "jsmith", "password" : "secret", "id" : 1}

问题是,如何获取给定作者ID的所有文章?在Redis中有一些命令可以做到吗?你会手动检索和过滤它们吗?或者我表达这种关系的方式有缺陷吗?你会建议什么?



1> af...:

在Redis中,没有直接的方法来使用字段值作为选择标准来检索哈希值.使用您当前的数据模型只能检索所有文章哈希值,然后丢弃那些不匹配的文章哈希值,但这种方法效率很低.

事实是,你必须自己维护索引.因为你不能在哈希中设置集合,所以我通过使用包含作者文章ID的单独集合来实现这一点.这样,你就会有作者的哈希:

author_1: { "name": "John Smith", ... "id": 1 }
author_2: { "name": "Jane Doe", ... "id": 2 }

并为此映射设置:

author_1_articles: [1, 3]
author_2_articles: [2]

它映射到这些文章:

article_1: { "title": "My title", ... "authorId": 1 }
article_2: { "title": "Another one", ... "authorId": 2 }
article_3: { "title": "What a story", ... "authorId": 3 }

现在,当你想获得作者X的文章时,你只需要获得SMEMBERS author_X_articles,你就会获得文章ID列表.

我会使用集合,因为如果您最终多次为作者添加相同的文章,Redis将忽略它.因此,您将获得的文章列表将永远不会重复,您可以使用SADD而无需先检查文章是否已在集合中.

这可能听起来像是很多工作,如果您的数据模型很复杂,并且您需要快速制作许多不同的访问模式.您最终要做的是维护自己的索引,对于那些您必须复制数据并使其保持最新的索引.这就是NoSQL的权衡......

推荐阅读
刘美娥94662
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有