我目前正在缓存我的Web应用程序。Rails3和轻松缓存视图和控制器
所以我开车使用memcache,我正在寻找一个简单的方法来处理所有这一切。
例如,我想缓存我的所有内容,直到它们未被修改。
我无法缓存所有页面,因为有些部分需要缓存。
所以我可以使用控制器的fragment_cache,然后将其他视图放入视图中,然后在更新后的模型中删除片段。
但感觉很重,我不喜欢这种方式。
如果您有任何想法,我会很高兴听到他们。
谢谢;)
我目前正在缓存我的Web应用程序。Rails3和轻松缓存视图和控制器
所以我开车使用memcache,我正在寻找一个简单的方法来处理所有这一切。
例如,我想缓存我的所有内容,直到它们未被修改。
我无法缓存所有页面,因为有些部分需要缓存。
所以我可以使用控制器的fragment_cache,然后将其他视图放入视图中,然后在更新后的模型中删除片段。
但感觉很重,我不喜欢这种方式。
如果您有任何想法,我会很高兴听到他们。
谢谢;)
你看过扫帚吗?我在一些应用程序中大量使用它们,并且它们运行良好,并将缓存与模型分开。不是清除模型中的缓存,而是创建一个可以观察变化的清理程序。您可以根据保存,更新等指定何时清除缓存。保存您直接在模型中编码的内容。只需创建一个像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/
你也可以使用缓存名称来扫你的数据。
例如,如果你这样做:
<% cache "my_model_#{@model.updated_at}" do %>
stuff I render with my model
<% end %>
自动为您当模型更新你的缓存清理,和你摆脱使用扫墓的。
您不必这样做,因为这是为您自动完成的。所以无论何时你'model.touch'缓存的片段都会失效。 – fphilipe 2011-04-07 15:52:29
感谢您的回答。我不知道清扫工。这正是我所期待的。回答验证;) – Arkan 2010-09-10 14:39:31