浏览 2822 次
该帖已经被评为良好帖
|
|
---|---|
作者 | 正文 |
发表时间:2010-01-26
这个缓存主要是针对列表性的查询,如分页,并将列表数据拆分,以单条记录的方式存放入缓存(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 ,也就是说,如果有记录创建/删除,那么它所在表的所有条件查询的缓存都会清除 项目地址:http://github.com/huacnlee/acts_as_second_level_cache 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2010-01-26
http://github.com/nkallen/cache-money 这个也不错,而且是经过Twitter验证过的,推荐试试
|
|
返回顶楼 | |
发表时间:2010-01-26
Raecoo 写道 http://github.com/nkallen/cache-money 这个也不错,而且是经过Twitter验证过的,推荐试试
本来就是Twitter开发的。。 |
|
返回顶楼 | |
发表时间:2010-01-26
最后修改:2010-01-26
cache-money 有人应用到实际项目中了吗?我之前就试着用它,但发现很多问题
而且对于列表的缓存一直弄不出来,网上找了很久也没有发现一处详细的文档,后面就放弃了,自己模拟 cache_fu 的方式做了一个 做了测试,效果还是很不错 |
|
返回顶楼 | |
发表时间:2010-03-07
huacnlee 写道 cache-money 有人应用到实际项目中了吗?我之前就试着用它,但发现很多问题
而且对于列表的缓存一直弄不出来,网上找了很久也没有发现一处详细的文档,后面就放弃了,自己模拟 cache_fu 的方式做了一个 做了测试,效果还是很不错 问一下啊,cache_money遇到多态的时候怎么设置? |
|
返回顶楼 | |