你必须添加代码到你的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_store仅用于配置写入和检索缓存时使用的存储。这与您的模型数据存储完全分离。
http://guides.rubyonrails.org/caching_with_rails.html你正在尝试用memcached代替ActiveRecord数据库,如MySQL吗?在创建新记录时写入memcached,而不是写入数据库?
根据您的评论更新
cache_money正在使用activerecord回调执行write_through操作。
http://api.rubyonrails.org/classes/ActiveRecord/Callbacks.html
看第15-17行,你可以看到他们在哪里调用after回调: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中,因此它将可用于所有模型