Rails ActiveRecord 二级缓存插件 acts_as_second_level_cache

这个插件是实现在 Rails AcitveRecord 里面进行数据的缓存功能,简化缓存操作
这个缓存主要是针对列表性的查询,如分页,并将列表数据拆分,以单条记录的方式存放入缓存(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

下次读取 Post.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 ,也就是说,如果有记录[b]创建/删除[/b],那么它所在表的[b]所有条件查询的缓存都会清除[/b]

项目地址:[url]http://github.com/huacnlee/acts_as_second_level_cache[/url]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值