适当的动态缓存策略

时间:2011-03-07 20:19:31

标签: ruby-on-rails caching memcached

对于那些曾经缩放/缓存任何内容的人来说,这可能是一个显而易见的问题。我没有,而且我迷失在互联网上的教程和代码片段中(http://guides.rubyonrails.org/caching_with_rails.html)。

我正在安装Memcached部署到Heroku,并且正在找出最优化的方法来执行以下操作:

  1. 查询数据库以查找帖子并查看其是否已被“标记”
  2. 查询白名单以查看帖子的其他部分是否已被“标记”
  3. 查询API以查看他们是否在其系统中找到此用户
  4. 渲染一个页面,其中包含对CSS / JS /等远程系统的大量重复调用。
  5. 我认为#1经常发生并经常变化。 #2少了。 #3不经常更改(月份),#4只应在#3更改时更改。

    我希望能够定期增加flag_count和view_count,而无需点击缓存版本。我应该做什么的页面,动作和片段缓存?现在,我根本没有缓存这个动作......

    我的[简化]控制器代码:

    def show
      expires_in 12.hours, :public => true
    
      @post = Post.find(params[:id])
    
      #CHECK FLAG STATUS
      redirect_to root_path and return if @post.flag?
    
      #CHECK WHITELIST STATUS
      redirect_to root_path and return if Whitelist.includes?(@post.screen_name)
    
      #Ping API again on the off chance user deleted/changed account
      if @post && @post.user = get_user_from_api( @post.screen_name )
        @post.increment_views!
        render :layout => false
      else
        redirect_to root_path
      end    
    end
    

1 个答案:

答案 0 :(得分:2)

有一些可能与此有关的小事。如果没有办法避免在每个请求中点击应用程序堆栈,那就很棘手。

片段缓存

fragment caching与memcache一起使用,以避免重新生成帖子/评论内容。如果您的观点很重,可能会有一些收获。 Memcache对象自我过期,可以使用以下内容键入最新版本的帖子:

<% cache @post.cache_key do %>
  <%= @post.formatted_content %>
  ...
<% end %>

需要考虑的其他事项

  • 设置服务器以发送包含图像的缓存标头,JS&amp; CSS
  • 查看barista以减少请求和&amp;捆绑资产