【问题标题】:Rails caching techniques for a personalized news feed用于个性化新闻提要的 Rails 缓存技术
【发布时间】:2013-06-20 17:00:04
【问题描述】:

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

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

编辑:

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

考虑到这一点,缓存每个提要应该采用这种方法:

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 即使使用您建议的写时扇出方法,缓存方法仍然是必要的。如果用户有来自Feed 模型的“时间线”并说@feed = Feed.where(etc.),那么提要项div 仍需要缓存传递,问题在于评论计数器。如何处理这些?
    • @railsuser400 我不认为有适合你的答案。这一切都取决于您的要求。对于响应式解决方案,甚至可能不涉及缓存。您可以通过 javascript IE 加载内容(评论计数或其他),或者使用 javascript MVC 采用单页方法。
    猜你喜欢
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    • 2015-04-03
    • 1970-01-01
    • 1970-01-01
    • 2017-05-22
    • 1970-01-01
    • 2011-08-20
    相关资源
    最近更新 更多