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