2011-04-27 91 views
1

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

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

user = User.new 
user.name = 'John Doe' 
user.email = '[email protected]' 
user.save 

它直接进入数据库并且不会进入memcache。我希望activerecord会自动使用memcache,如果配置它。情况并非如此吗?任何关于重写模型以使用Rails.cache的好文章(或者应该这样做是在控制器中完成的)?

回答

3

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

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

你们是不是要替换一个ActiveRecord数据库如MySQL与memcached的?在创建新记录时写入memcached,而不是写入数据库?

UPDATE基于您的评论

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 

然后,您可以在ActiveRecord的::基本代码与它your_cache_method模块,包括它,所以这将是适用于所有型号

+0

我想我想要的是“直写式缓存”。我希望将新数据写入memcache并立即可用于在网站上查看。然后在后台,mysql数据库可以赶上memcache中的数据。我发现插件听起来像他们这样做(缓存钱),但他们是非常过时的。因此,如果我必须手动执行此操作,那么我会在哪里放置代码来执行此操作? – James 2011-04-27 19:27:47

+0

发表根据您的评论更新。 – johnmcaliley 2011-04-27 20:04:31

+1

无关注意:你可以在github链接中引用行号:https://github.com/nkallen/cache-money/blob/master/lib/cash/write_through.rb#L15-17 – 2011-04-27 20:12:47