如何有效地使用redis实现嵌套注释系统

时间:2014-06-24 19:40:59

标签: database redis

我正在尝试使用redis实现嵌套注释系统,例如每篇文章都可以将注释作为第一层注释,然后可以注释第一层注释并创建第二层注释,依此类推,可以拥有无​​限层。现在我使用哈希,每个键代表一篇文章,一个字段用于文章信息,一个字段用于评论,评论的值是xml格式,其中标签是嵌套为子节点的注释id。但它的效率非常低,因为每次我都试图检索评论,我必须把所有这些作为一个整体。所以我想知道是否还有其他更有效的方法来做到这一点?感谢

1 个答案:

答案 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>
  • 的评论的评论

添加新评论的步骤如下:

  1. 增量comment-id
  2. 创建一个新哈希,其关键是comment:的连接和步骤1中的值返回
  3. 使用评论数据
  4. 填写在步骤2中创建的哈希
  5. 如果评论没有父级,请将其ID添加到相应的article-comments:<id>集。如果它有父母,请将其添加到相应的comment-children:<id>集。