在这样的场景中,有一些用户拥有帖子,并且每个用户都有一个代表新闻提要的 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。
考虑到这一点,缓存每个提要应该采用以下方法:
- 检查 redis 中的设置(第一次命中)
- 将
@feed_array
写入memcached - 使用单个 SQL 命令获取帖子并保存到
@feed
- 将
@feed
写入memcached - 检查 redis 中的设置(第二次命中)
- 如果设置值与
@feed_array
匹配,则从memcached返回@feed
。否则,新的 SQL 查询并覆盖 memcached 中的@feed
这种方法意味着在遍历 @post
div 时可以轻松地使用 View 的缓存,但是如何处理评论计数?
最佳答案
与您正在使用的应用程序堆栈无关,我认为缓存方法无法适应您的情况。类似 twitter 的功能通常通过反规范化来处理。
在您的情况下,这可能意味着为每个用户实现一个提要模型,附加关注者的新帖子,以便可以快速从用户自己的提要加载用户的“时间线”,而不是加入他的所有(可能有数千个) friend 。
关于ruby-on-rails - 用于个性化新闻提要的 Rails 缓存技术,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17271215/