Gem second_level_cache 简介

hooopo · 2012年09月13日 · 最后由 u1449498927 回复于 2015年12月07日 · 7325 次阅读
本帖已被管理员设置为精华贴

简介: second_level_cache 是一个 cache money 的轻量级实现,支持 Rails 3.2 版本。

安装: 在 Gemfile 里:

gem "second_level_cache", "~> 1.5"

使用:

class User < ActiveRecord::Base
  acts_as_cached(:version => 1, :expires_in => 1.week)
end

特性:

  1. 和 cache_money 类似,只需要在 model 里做一次声明,不影响正常的 ActiveRecord 查询接口。可以方便的添加/移除缓存插件无须修改任何代码。
  2. 方便的缓存清理机制。提供清理各个粒度缓存内容的接口(包括清理所有 second_level_cache 的缓存、清理单个 model 的所有记录的缓存、清理单条记录的缓存)
  3. 通过 callback 使缓存和数据库保持同步。甚至对 AR 里大部分不调用 callback 的方法(比如 update_columnupdate_counter 等)进行处理,保持缓存和数据库同步。
  4. 可以缓存 has_one 和 belongs_to 还有带条件的 find 查询,比如:user.topics.where(:status => 1).find(1)
  5. 提供 fetch_by_uniq_keyfetch_by_uniq_key! 方法,来缓存非主键的唯一列,比如:
User.fetch_by_uniq_key("hooopo", :nick_name)
Tag.fetch_by_uniq_key!("ruby", :name)

上面的查询会使用缓存,非常适合这样的 url:http://book.douban.com/tag/%E5%B0%8F%E8%AF%B4http://ruby-china.org/hooopo

更完整的介绍:

https://github.com/csdn-dev/second_level_cache

好东西,现在 iteye 就是用的这个么?

#1 楼 @ywencn iteye 还是 Rails2.3 的。。。 新开发的项目在用。

试用了一下,很方便,有 2 个需要改进的地方

  1. 支持 where(:id => params[:id]) 这种查询
  2. 支持 find(id_array) 这种多 id 的 cache 特别是第 2 种,在 eager loading associations 下,很有用。fork 了代码,准备看看是否能够改进。

我最近有在用 simple_cacheable,整体都挺好,下次试试你这个。

好东西。

@hooopo V5 啊,膜拜。 这个以前写的?

#3 楼 @quakewang 第一个很少人会这么写,好像实现起来也比较复杂,一般都是 scope.find(id)。 第二种很好,现在是把 eager loading 改成 N + 1 Query,但不知到 memcached 批量读和 N 次 read 性能差异有多大。 刚才发现 dalli 的 multi read 还有这个问题:https://github.com/mperham/dalli/issues/106

没像整体用过,通常都手动用 Rails.cache,这个可以试试

最近在学习用 Padrino 0.13 ruby 2.2 ActiveRecord 4.2

config/root.rb

#initialize redis and ActiveRecord Cache
CACHE = ActiveSupport::Cache::RedisStore.new :host => "127.0.0.1", :driver => :hiredis, :expires_in => 1.week
CACHE.logger = logger

SecondLevelCache.configure do |config|
  config.cache_store = CACHE
  config.logger = logger
  config.cache_key_prefix = ''
end

config/database.rb

ActiveRecord::Base.raise_in_transactional_callbacks = false

在测试环境中运行

thin start

都会出现以下警告信息

You can opt into the new behavior and remove this warning by setting:

  config.active_record.raise_in_transactional_callbacks = true

请问如何才能去掉这个警告信息~

huacnlee 将本帖设为了精华贴。 01月04日 09:43
需要 登录 后方可回复, 如果你还没有账号请 注册新账号