2011-04-27 40 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