2

在有用户发布帖子的场景中,每个用户都有一个代表新闻提要的视图(很像登录的 Tumblr 帐户),并且每个帖子概述都有一个指向评论的链接,每个帖子都有一个评论计数器,什么是这里最好的缓存策略(在 Rails 4 堆栈上)?

假设有 5 个用户 ABCDE,每个用户都订阅了他们右边的 2 个用户(A 订阅了 B 和 C,B 订阅了 C 和 D 等),并且只有他们订阅的用户显示在他们的新闻提要视图。

编辑:

假设采用写时扇出方法,其中每个用户在 Redis 中都有一组唯一的(帖子 id),并且在每次post创建时,新帖子的 id 都会附加到帖子创建者的每个朋友的集合中. redis 集充当索引,并通过单个 SQL 查询获取用户的提要。

考虑到这一点,缓存每个提要应该是这种方法的问题:

  1. 在 redis 中检查设置(第一次命中)
  2. 写入@feed_arraymemcached
  3. 使用单个 SQL 命令获取帖子并保存到@feed
  4. 写入@feedmemcached
  5. redis中检查设置(第二次命中)
  6. 如果设置值匹配,则从 memcached@feed_array返回。否则在 memcached 中@feed新的 SQL 查询和覆盖@feed

这种方法意味着在遍历@postdiv 时可以轻松地缓存视图,但是如何处理评论计数呢?

4

1 回答 1

4

与您正在使用的应用程序堆栈无关,我认为缓存方法不会在您的情况下扩展。类似 twitter 的功能通常由反规范化处理。

在您的情况下,这可能意味着为每个用户实施一个提要模型,附加关注者的新帖子,以便从他自己的提要中快速加载用户的“时间线”,而不是加入他的所有(可能数千个)的朋友。

于 2013-07-02T18:56:52.263 回答