ruby-on-rails - 用于个性化新闻提要的 Rails 缓存技术

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

在这样的场景中,有一些用户拥有帖子,并且每个用户都有一个代表新闻提要的 View (与登录的 Tumblr 帐户非常相似),并且每个帖子概述都有一个指向评论的链接,每个评论都有一个评论计数器帖子,这里最好的缓存策略是什么(在 Rails 4 堆栈上)?

假设 5 个用户 A B C D E,每个用户都订阅了其右侧的 2 个用户(A 订阅了 B 和 C,B 订阅了 C 和 D 等),并且仅显示他们订阅的用户在他们的新闻提要 View 中。

编辑:

假设采用写时扇出方法,每个用户在 Redis 中都有一组唯一的(帖子 id),并且在每个帖子创建时,新帖子的 id被附加到帖子创建者的每个 friend 的集合中。 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

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

最佳答案

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

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

关于ruby-on-rails - 用于个性化新闻提要的 Rails 缓存技术,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17271215/

相关文章:

ruby-on-rails - 使用 Rails.cache.write 设置原始值

c++ - QWebEngine如何加载缓存?

javascript - JavaScript 中的 ruby​​ 给出 Uncaught SyntaxError : Unexpected identifier

mysql - 数据库级别的 Rails 舍入 float

php - 缓存的最佳实践是什么?有什么限制?

google-calendar-api - 有关生成 iCal Feed 的问题

IOS:具有多个节点的 NSMXLParser

wordpress - WordPress 是否有 Feedburner 插件可以更改页面上的 RSS <link/> 标签

ruby-on-rails - Rails4 : How to display the value one time only

ruby-on-rails - Rails 中的 mime 类型是怎么回事?