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

最佳答案

我认为一个好的第一步是考虑这在关系数据库中会是什么样子。例如,一个简单的系统可能具有以下架构:

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 中返回的值的串联
  • 用评论数据
  • 填写在步骤 2 中创建的哈希
  • 如果评论没有父级,则将其 ID 添加到适当的 article-comments:<id> 集。如果它确实有父级,请将其添加到适当的 comment-children:<id> 集。
  • 关于database - 如何高效使用redis实现嵌套评论系统,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24394957/

    10-15 07:13