【问题标题】:Rails3 and Easily caching views and controllersRails3 和轻松缓存视图和控制器
【发布时间】:2011-03-29 10:59:00
【问题描述】:

我目前正在缓存我的网络应用程序。

所以我开车去使用 memcache,我正在寻找一种简单的方法来处理这一切。

例如,我想缓存我的所有内容,直到它们未被修改。

而且我不能缓存所有页面,因为有些部分需要分开缓存。

所以我可以为控制器使用一个fragment_cache,然后另一个进入视图,然后在模型中更新后删除片段。

但是感觉很重,我不喜欢这样。

如果您有任何想法,我很乐意听到。

谢谢 ;)

【问题讨论】:

    标签: caching ruby-on-rails-3 memcached


    【解决方案1】:

    你看过扫地机吗?我在我的一些应用程序中大量使用它们,它们运行良好,并且将缓存与您的模型分开。您无需清除模型中的缓存,而是创建一个观察变化的清扫器。您可以根据保存、更新等指定何时清除缓存。使您无需直接在模型中编码这些内容。只需创建一个像 app/sweepers 这样的目录,然后为每个要清除缓存的模型放入一个目录。这个具体的例子是针对动作缓存的,但你可能可以对你的片段应用类似的东西。

      class WidgetSweeper < ActionController::Caching::Sweeper
          observe Widget
          def after_update(widget)
            expire_cache_for(widget)
          end
    
          def after_destroy(widget)
            expire_cache_for(widget)
          end
    
          def after_create(widget)
            expire_cache_for(widget)
          end
    
      private
        def expire_cache_for(widget)
          expire_action(:controller=>"widgets",:action=>"show",:id=>widget.id)
          expire_action(:controller=>"widgets",:action=>"index")
        end
      end
    

    我在这里写了一篇关于动作和片段缓存的文章,其中包含更多详细信息,包括如何根据条件进行缓存:
    http://www.cowboycoded.com/2010/07/14/performance-exercise-1-rails-cache-cash/

    【讨论】:

    • 感谢您的回答。我不知道扫地机。这正是我想要的。答案已验证;)
    【解决方案2】:

    您也可以使用缓存名称来扫描您的数据。

    例如,如果你这样做:

    <% cache "my_model_#{@model.updated_at}" do %>
    stuff I render with my model
    <% end %>
    

    当模型更新时,您会自动清理缓存,并且无需使用清扫器。

    【讨论】:

    • 您不必这样做,因为这是自动为您完成的。因此,每当您model.touch 时,缓存的片段都会失效。
    猜你喜欢
    • 1970-01-01
    • 2011-08-12
    • 1970-01-01
    • 2012-10-15
    • 1970-01-01
    • 1970-01-01
    • 2013-11-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多