1

devisekaminari、およびを使用してdalli(memcached)います。
読み込み時にキャッシュを実装しようとしましたhttp://example.com/communities?sort=popular

以下のようにコーディングしてみました。ただし、キャッシュの保存が機能していないようです。
ページをリロードするたびにSQLを送信しているようです...

どうしたの?

次に、可能であれば、ユーザーが「Community」レコードを作成または編集した後に、文字列「community_index_sort_by_」を含むすべての保存済みキャッシュをクリアしたいと思います。

構成/環境/開発.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

ビュー内のファイルには何も触れていません

4

1 に答える 1

1

キャッシュ フラグメントはキャッシュ呼び出しでビューに作成されませんか?

ビューでは、ページ オフセットなどのパラメーターをキーに含めることを忘れないでください。

<% 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

于 2013-01-28T21:02:55.960 に答える