我正在使用devise
,kaminari
和dalli(memcached)
。
我刚刚尝试在加载时实现缓存http://example.com/communities?sort=popular
我尝试像下面一样编码。但是,缓存存储似乎不起作用。
看起来每次重新加载页面时它仍然在发送 SQL......
怎么了?
然后,如果可能的话,我想在用户制作或编辑"社区"记录后清除所有包含字符串"community_index_sort_by_"的存储缓存。
config/environment/development.rb
...
config.consider_all_requests_local = true
config.action_controller.perform_caching = true
config.cache_store = :dalli_store
...
community_controller.rb
def index
@key = "community_index_sort_by_" + params[:sort].to_s + "_page_" + params[:page].to_s
if params[:sort] == 'popular'
unless Rails.cache.fetch(:controller => "communities", :action => "index", :action_suffix => @key)
@communities = Community.scoped.page(params[:page]).order("cached_votes_up DESC")
end
elsif params[:sort] == 'latest'
@communities = Community.scoped.page(params[:page]).order("created_at DESC")
end
end
我没有触摸任何视图文件
缓存片段不是通过缓存调用在视图中创建的吗?
在视图中,不要忘记在键中包含参数,例如页面偏移量:
<% cache 'the_cache_fragment_key' do %>
...the view...
<% end %>
在控制器中:
unless fragment_exist?('cache_fragment_key')
...cache fragment doesn't exist, make a call for it...
end
这种轨道转换可能会有所帮助。http://railscasts.com/episodes/90-fragment-caching
为了在进行更新时清除缓存,轨道清扫器非常有用。您可以为模型方法或控制器操作定义方法。http://guides.rubyonrails.org/caching_with_rails.html#sweepers