Rails ActiveRecord 2次キャッシュカードacts_as_second_level_cache


このカードはRails ActiveRecordでデータをキャッシュする機能を実現し、キャッシュ操作を簡素化しています
このキャッシュは主に、ページングなどのリスト的なクエリーに対して行われ、リストデータを分割し、単一のレコードでキャッシュ(Memcached)に格納する利点があります.これにより、各レコードがキャッシュに記録される重複ヒットが高く、キャッシュの更新も便利になり、単一のレコードキャッシュを簡単に処理するだけでよいというメリットがあります.
次のようになります.

# app/models/post.rb

class Post < ActiveRecord::Base
  acts_as_second_level_cache

  def self.find_posts(page,per_page = 3)
    cache_items_with_paginate("find_posts/#{page}/#{per_page}") do
      paginate :page => page, :per_page => 5
    end
  end

  def self.recents(limit = 10)
    cache_items("recents/#{limit}") do
      all(:order => "id desc", :limit => limit)
    end
  end

  def self.last_cached(limit = 10)
    cache_item("last_cached/#{limit}") do
      find(:first,:order => "id desc", :limit => limit)
    end
  end
end

class PostsController < ApplicationController
  def index
    @posts = Post.find_posts(params[:page])

  end

  def show
    @post = Post.get_cache(params[:id])    

    @recent_posts = Post.recents(10)
  end
end

@recent_posts = Post.recents(10)
acts_as_second_level_Cacheはall(:order=>「id desc」、:limit=>limit)で得られたlistをidリストに生成し、例えば[2,8,4,54,1]をキャッシュに格納する:models/posts/recents/10
次の読み込みrecents(10)の場合、models/posts/recents/10を除去して[2,8,4,54,1]を得、ループでそれぞれget_Cacheメソッドは、cache_のように記録されたキャッシュデータを取り出します.fuのget_cache.
キャッシュの期限切れについて
プラグインにデフォルトで
after_update単一レコード(get_cache)のキャッシュ値をクリアする方法
after_createとafter_destroyクリアcache_items/cache_items_with_paginate/cache_item、つまり記録があれば
作成/削除すると、テーブルの
すべての条件クエリーのキャッシュがクリアされます
プロジェクトのアドレス:
http://github.com/huacnlee/acts_as_second_level_cache