`
huacnlee
  • 浏览: 9580 次
  • 性别: Icon_minigender_1
  • 来自: 成都
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

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

项目地址:http://github.com/huacnlee/acts_as_second_level_cache

分享到:
评论
4 楼 ywencn 2010-03-07  
huacnlee 写道
cache-money 有人应用到实际项目中了吗?我之前就试着用它,但发现很多问题

而且对于列表的缓存一直弄不出来,网上找了很久也没有发现一处详细的文档,后面就放弃了,自己模拟 cache_fu 的方式做了一个

做了测试,效果还是很不错


问一下啊,cache_money遇到多态的时候怎么设置?
3 楼 huacnlee 2010-01-26  
cache-money 有人应用到实际项目中了吗?我之前就试着用它,但发现很多问题

而且对于列表的缓存一直弄不出来,网上找了很久也没有发现一处详细的文档,后面就放弃了,自己模拟 cache_fu 的方式做了一个

做了测试,效果还是很不错
2 楼 ywencn 2010-01-26  
Raecoo 写道
http://github.com/nkallen/cache-money    这个也不错,而且是经过Twitter验证过的,推荐试试

本来就是Twitter开发的。。
1 楼 Raecoo 2010-01-26  
http://github.com/nkallen/cache-money    这个也不错,而且是经过Twitter验证过的,推荐试试

相关推荐

    Secode_level_cache.zip

    早在2008年开始,我们就借鉴了Java强大的ORM 框架Hibernate的二级对象缓存编写了这个Rails的AR对象缓存插件,并且一直作为JavaEye网站缓存优化的秘密武器来使用,取得了非常理 想的效果。 现在我们将这个插件从...

    acts_as_authenticated

    "acts_as_authenticated" 是一个经典的Ruby on Rails插件,它为Rails应用提供了用户认证功能。在Rails框架中,用户认证通常涉及验证用户身份、管理会话以及处理登录和登出等操作。acts_as_authenticated插件简化了这...

    rails_admin_acts_as_list:rails_admin插件以对记录进行排序

    介绍插件,用于对记录进行排序(使用 gem)安装要启用rails_admin_acts_as_list,请将以下内容添加到您的Gemfile : gem 'rails_admin_acts_as_list'gem 'rails_admin' 重要提示: rails_admin_acts_as_list之前必须...

    acts_as_category:想想acts_as_tree +权限

    #ActsAsCategory acts_as_category (Version 2.0 beta)acts_as_category,是acts_as插件在acts_as_tree风格的Ruby on Rails的ActiveRecord的模式,但有一些额外的功能,以及多种便捷视图助手。例子(有关实例方法和...

    用acts_as_rateable实现简单的打分功能

    在Ruby on Rails框架中,`acts_as_rateable`是一个非常实用的插件,它允许用户对模型进行评分,从而实现简单的打分功能。这个插件是Rails社区中的一个开源项目,旨在简化应用中的评分系统集成。在本篇讨论中,我们将...

    acts_as_paranoid

    "acts_as_paranoid" 是一个在Ruby on Rails框架中常用的gem,用于处理数据库记录的软删除(soft delete)。在数据库操作中,通常我们会遇到删除数据的需求,但直接删除可能会导致数据丢失,尤其是在生产环境中。...

    acts_as_nested_set的增强版BetterNestedSet

    acts_as_nested_set是由Rails社区开发的Gem,它为ActiveRecord模型添加了Nested Set的功能。用户只需在模型中加入acts_as_nested_set,即可享受其提供的各种操作,如添加、移动、删除节点,以及获取子节点和祖先节点...

    actions_as_commentable:ActiveRecord acts_as_commentable插件

    gem 'acts_as_commentable' Rails gem 'acts_as_commentable' , '3.0.1' Rails gem 'acts_as_commentable' , git: 'git@github.com:jackdempsey/acts_as_commentable.git' , branch: '2.x' 生成器 Rails 3+ ...

    acts_as_paranoid:ActiveRecord插件可让您隐藏和还原记录,而无需实际删除它们

    使徒行传 一个Rails插件来添加软删除。...用法安装gem: gem 'acts_as_paranoid' , '~&gt; 0.7.0' bundle install创建迁移bin/rails generate migration AddDeletedAtToParanoiac deleted_at:datetime:index启用ActsAs

    acts_as_aliased:扩展 ActiveRecord

    rails generate acts_as_aliased:install rake db:migrate 这将创建一个新表aliases 。 用法 假设您有一个需要别名的模型Company ,因为公司名称有不同的版本。 使用acts_as_aliased在模型中启用别名: model ...

    acts_as_liked:向任何 Active Record 模型添加类似功能

    $ rails generate acts_as_liked 并且不要忘记迁移您的数据库 $ rake db:migrate 用法 可爱的模特 将acts_as_likeable添加到任何模型,它的实例可以被其他模型喜欢。 class Post &lt; ActiveRecord :: Base ...

    acts_as_restful_list:就像acts_as_list一样,但很安静

    acts_as_restful_list 就像acts_as_list 一样,但不必使用非标准方法调用(如insert_at)来弄乱您的代码,acts_as_restful_list 使管理列表变得简单。 您可以像更新其他任何内容一样更新 position 属性,其余的都...

    acts_as_xapian:Xapian全文搜索插件,适用于Ruby on Rails

    《acts_as_xapian:为Ruby on Rails打造的Xapian全文搜索引擎插件》 在Web开发领域,全文搜索引擎能够极大地提升用户对信息的检索效率,对于内容丰富的应用尤其重要。Ruby on Rails作为流行的Web框架,有着众多的...

    Api-acts_as_api.zip

    Api-acts_as_api.zip,使在rails中创建api响应变得简单和有趣,一个api可以被认为是多个软件设备之间通信的指导手册。例如,api可用于web应用程序之间的数据库通信。通过提取实现并将数据放弃到对象中,api简化了编程...

    acts_as_commentable_with_threading:类似于acts_as_commentable; 然而,利用 awesome_nested_set 提供线程评论

    作为可评论行为(现在有评论线程(TM)!!!——在(TM)上开玩笑) 允许将线程注释添加到多个不同的模型。 与acts_as_commentable 兼容(但需要更改数据库架构) ... rails generate acts_as_commentable_with_

    偏执狂:Rails 3、4和5的acts_as_paranoid

    paranoia具有令人惊讶的行为(例如,重写ActiveRecord的delete和destroy ),不建议用于新项目。 有关更多详细信息,请参见。 偏执狂将继续接受错误修复并支持Rails的新版本,但不接受新功能。 偏执狂 偏执狂是...

    Ruby-actsasfollower允许任何ActiveRecord模型关注其他模型

    Ruby-acts_as_follower 是一个流行的 Ruby on Rails 框架插件,它为 ActiveRecord 模型提供了关注(follow)和取消关注(unfollow)的功能。这个插件使得在社交网络应用或者其他需要用户关注系统动态、其他用户或者...

    acts_as_commentable_more:提供评论功能的gem

    使徒行传更多 谢谢 act_as_commentable_more是从发展而来的。... acts_as_commentable :comments # default options types: [:comment], options: { class_name: 'Comment', as: :commentable }, c

    acts_as_nps_rateable:Rails 4.x的一个宝石Ruby,实现了Net Promoter Score

    act_as_nps_rateable为基于ActiveRecord的模型提供净促销值(NPS)评级和分析。 促销员净额是衡量客户满意度的指标; 它是会推荐您的产品/服务的客户比例与不会推荐您的产品/服务的客户比例之比。 NPS在Wikipedia...

    acts_as_shopping_cart:简单的购物车实施

    acts_as_shopping_cart 一个简单的购物车实现。 您可以找到示例应用程序。 安装 滑轨3 从0.2.0版开始,不再支持Rails 3。 如果您仍需要在Rails 3应用程序中实现此gem,请使用0-1-x分支 将其包含在您的Gemfile中 ...

Global site tag (gtag.js) - Google Analytics