【发布时间】: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 查询获取用户的提要。
考虑到这一点,缓存每个提要应该采用这种方法:
- redis 中的检查集(第一次命中)
- 将
@feed_array写入内存缓存 - 使用单个 SQL 命令获取帖子并保存到
@feed - 将
@feed写入内存缓存 - redis 中的检查集(第二次命中)
- 如果设置值与
@feed_array匹配,则从memcached 返回@feed。否则新的 SQL 查询并覆盖 memcached 中的@feed
这种方法意味着在遍历 @post div 时可以轻松地为视图使用缓存,但是如何处理评论计数?
【问题讨论】:
标签: ruby-on-rails caching feed cache-expiration