我将在 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/