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

use*_*081 2 database redis

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

Tim*_*per 5

我认为良好的第一步是考虑关系数据库中的这种情况.例如,一个简单的系统可以具有以下模式:

Article (
  id INT,
  name TEXT,
  body TEXT
)

Comment (
  id INT,
  article_id INT,
  parent INT,
  author TEXT,
  body TEXT
)
Run Code Online (Sandbox Code Playgroud)

将其转换为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. 创建一个新哈希,其键是第1步中的连接comment:和值返回
  3. 使用注释数据填写在步骤2中创建的哈希
  4. 如果注释没有父项,请将其ID添加到适当的article-comments:<id>集合中.如果它有父项,请将其添加到适当的comment-children:<id>集合中.