2010-09-10 55 views
1

我目前正在缓存我的Web应用程序。Rails3和轻松缓存视图和控制器

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

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

我无法缓存所有页面,因为有些部分需要缓存。

所以我可以使用控制器的fragment_cache,然后将其他视图放入视图中,然后在更新后的模型中删除片段。

但感觉很重,我不喜欢这种方式。

如果您有任何想法,我会很高兴听到他们。

谢谢;)

回答

4

你看过扫帚吗?我在一些应用程序中大量使用它们,并且它们运行良好,并将缓存与模型分开。不是清除模型中的缓存,而是创建一个可以观察变化的清理程序。您可以根据保存,更新等指定何时清除缓存。保存您直接在模型中编码的内容。只需创建一个像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/

+0

感谢您的回答。我不知道清扫工。这正是我所期待的。回答验证;) – Arkan 2010-09-10 14:39:31

0

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

例如,如果你这样做:

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

自动为您当模型更新你的缓存清理,和你摆脱使用扫墓的。

+0

您不必这样做,因为这是为您自动完成的。所以无论何时你'model.touch'缓存的片段都会失效。 – fphilipe 2011-04-07 15:52:29