database - 如何在 Redis 上实现 Twitter 或 Facebook 等用户源

标签 database redis feed timeline

我将在 Redis 上与支持的关注者一起编写简单的新闻网站。 我无法想象如何像 Twitter 那样组织用户时间线。我读到了 Retwis ( http://redis.io/topics/twitter-clone ),但它的 feed 创建方法似乎很愚蠢。如果我想删除条目怎么办?我应该从关注者提要中删除所有条目引用。如果我已经不关注某些用户怎么办?

最佳答案

有几种方法可以利用一点想象力来攻击您所描述的内容,以下是一些解决您问题的示例:

What if I want to remove entries?

可以为每个帖子维护一个集合,例如 post:$postid:users,保存可能在其提要中包含该帖子的所有用户 ID;当要删除帖子时,只需从该集合中提取所有成员并迭代 ids 以将其从每个 uid:$userid:posts 集合中删除;说到这里,您必须将最后一个变成一个集合,而不是像原始文章建议的那样变成一个列表,以便能够提取和删除单个项目,但这很简单,逻辑非常相似。

What if I already do not follow some users?

当为每个单独的用户生成提要时,您必须迭代并读取每个 post:$postid 键,从中您可以访问作者用户 ID;因此,在显示帖子之前,您先阅读此 ID 并在 uid:$userid:following 集中查找它,如果存在,我们将显示该帖子,如果不存在,我们将从 uid 中删除它: $userid:posts 并且不显示它。

简而言之,为了在 redis 中构建这种逻辑,您必须记住以下几点:

  • 您将需要很多命令,但没关系,Redis 应该足够快来很好地处理它。
  • 数据会重复,但这也没关系;对于具有关系 DBMS 背景的人来说,如果每个用户已经拥有一组包含其帖子的用户,那么为每个帖子存储一组用户可能看起来很疯狂,但这是在 Redis 等非关系数据存储中建立关系的唯一方法。
  • 一般来说,在 Redis 中设计相关内容时,请考虑集合和排序集合。

使用 Redis,您可以自己完成所有事情,但是一旦您了解了它,它实际上非常强大。

关于database - 如何在 Redis 上实现 Twitter 或 Facebook 等用户源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12357770/

相关文章:

linux - 不小心从redis中删除了一个表,有没有回滚之类的操作?

haskell - Haskell 中的 RSS/Atom 提要解析

ios - 使用 Facebook SDK 发布到新闻源,无需登录

php - 添加数据库时如何避免重复输入

database - 将 Django 模型从一个应用程序移动到另一个应用程序

MySQL 查询,尝试收集计数

mysql - 在一列中查找 N 个最大的元素

redis - 在 Kubernetes 上运行 Kafka 是一种好方法吗?

redis - 如何查看我的 Redis 数据库 current_size?

python - 如何使用 YouTube API 从 YouTubeVideoFeed 对象获取公共(public) channel URL?