在有用户发布帖子的场景中,每个用户都有一个代表新闻提要的视图(很像登录的 Tumblr 帐户),并且每个帖子概述都有一个指向评论的链接,每个帖子都有一个评论计数器,什么是这里最好的缓存策略(在 Rails 4 堆栈上)?
假设有 5 个用户 ABCDE,每个用户都订阅了他们右边的 2 个用户(A 订阅了 B 和 C,B 订阅了 C 和 D 等),并且只有他们订阅的用户显示在他们的新闻提要视图。
编辑:
假设采用写时扇出方法,其中每个用户在 Redis 中都有一组唯一的(帖子 id),并且在每次post
创建时,新帖子的 id 都会附加到帖子创建者的每个朋友的集合中. redis 集充当索引,并通过单个 SQL 查询获取用户的提要。
考虑到这一点,缓存每个提要应该是这种方法的问题:
- 在 redis 中检查设置(第一次命中)
- 写入
@feed_array
memcached - 使用单个 SQL 命令获取帖子并保存到
@feed
- 写入
@feed
memcached - redis中检查设置(第二次命中)
- 如果设置值匹配,则从 memcached
@feed_array
返回。否则在 memcached 中@feed
新的 SQL 查询和覆盖@feed
这种方法意味着在遍历@post
div 时可以轻松地缓存视图,但是如何处理评论计数呢?