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