我正在尝试使用redis实现嵌套注释系统,例如每篇文章都可以将注释作为第一层注释,然后可以注释第一层注释并创建第二层注释,依此类推,可以拥有无限层。现在我使用哈希,每个键代表一篇文章,一个字段用于文章信息,一个字段用于评论,评论的值是xml格式,其中标签是嵌套为子节点的注释id。但它的效率非常低,因为每次我都试图检索评论,我必须把所有这些作为一个整体。所以我想知道是否还有其他更有效的方法来做到这一点?感谢
答案 0 :(得分:5)
我认为良好的第一步是考虑关系数据库中的情况。例如,简单系统可以具有以下架构:
Article (
id INT,
name TEXT,
body TEXT
)
Comment (
id INT,
article_id INT,
parent INT,
author TEXT,
body TEXT
)
将其转换为Redis需要一点思考。您希望确保您使用的数据结构是正确的,以便为您提供最快的查找时间。以下是我在实现您的系统时使用的不同键/键结构:
article:<id>
- 存储文章信息的哈希,并具有以下键:
name
- 文章的名称body
- 文章的正文article-id
- 文章ID的自动增量值article-comments:<id>
- 一组评论ID,是ID为<id>
的文章的顶级评论comment:<id>
- 存储评论信息并具有以下键的:
author
- 评论作者body
- 评论的正文comment-id
- 评论ID的自动增量值comment-children:<id>
- 一组注释ID,表示回复ID为<id>
添加新评论的步骤如下:
comment-id
comment:
的连接和步骤1中的值返回article-comments:<id>
集。如果它有父母,请将其添加到相应的comment-children:<id>
集。