用于个性化新闻源的Rails缓存技术

时间:2013-06-24 08:38:41

标签: ruby-on-rails caching news-feed cache-expiration

在有用户有帖子的情况下,每个用户都有一个代表新闻Feed的视图(很像是登录的Tumblr帐户),每个帖子概述都有一个指向评论的链接帖子,这里最好的缓存策略是什么(在Rails 4堆栈上)?

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

编辑:

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

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

  1. 检查在redis中设置(第一次点击)
  2. @feed_array写入memcached
  3. 使用单个SQL命令获取帖子并保存到@feed
  4. @feed写入memcached
  5. 在redis中检查设置(第二次点击)
  6. 如果设置值与@feed_array匹配,则从memcached返回@feed。否则新的SQL查询并覆盖memcached中的@feed
  7. 这种方法意味着在迭代@post div时对视图的缓存使用很容易,但是如何处理注释计数呢?

1 个答案:

答案 0 :(得分:4)

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

在您的情况下,这可能意味着为每个用户实施一个Feed模型,添加关注者的新帖子,以便从他自己的Feed中加载用户的“时间轴”,而不是加入他的所有用户(可能成千上万的朋友。