您是否需要在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的任何好文章(或者这应该是在控制器中完成的事情)?
答案 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中,以便所有模型都可以使用