在Rails 3应用程序中使用memcache



你必须添加代码到你的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中,因此它将可用于所有模型

相关内容

  • 没有找到相关文章

最新更新