在Rails 3应用程序中使用memcache

时间:2011-04-27 14:39:08

标签: ruby-on-rails-3 memcached

您是否需要在Rails应用程序中添加代码才能使用memcache?我已将config.cache_store = :dalli_store添加到我的生产环境中,Rails.cache.write('color', 'red')正常工作。

我没有对我的模型,视图或控制器进行任何修改。当我创建并保存对象时,例如

user = User.new
user.name = 'John Doe'
user.email = 'john@doe.com'
user.save

它直接进入数据库而不是去memcache。我希望activerecord会在配置后自动使用memcache。那不是这样吗?有关重写模型以使用Rails.cache的任何好文章(或者这应该是在控制器中完成的事情)?

1 个答案:

答案 0 :(得分:3)

config.cache_store仅用于配置写入和检索缓存时使用的存储。这与模型数据存储完全分开。

http://guides.rubyonrails.org/caching_with_rails.html

您是否尝试使用memcached替换MySQL等ActiveRecord数据库?在创建新记录时写入memcached,而不是写入数据库?

根据您的评论进行更新

cache_money正在使用activerecord回调进行write_through http://api.rubyonrails.org/classes/ActiveRecord/Callbacks.html

查看第15-17行,你可以看到他们称之为后回调: https://github.com/nkallen/cache-money/blob/master/lib/cash/write_through.rb

你可以用同样的方式完成你需要的东西。只需编写自定义方法的代码,并将其提供给您的模型。然后使用模型中的after_create,after_update,after_destroy调用该方法。如果您希望在所有模型中实现它,您可以在初始化程序中执行此操作:

#UNTESTED, but should be close
ActiveRecord::Base.descendants.each do |model|
  model.class_eval do
    after_create :your_cache_method
    #... other callbacks
  end
end

然后,您可以使用your_cache_method对模块进行编码并将其包含在ActiveRecord :: Base中,以便所有模型都可以使用

相关问题