2012-01-13 50 views
0

我在應用程序中使用memcached(gem memcache-client),但我想同時使用內存緩存存儲。目前,我有我的application.rb如下:如何同時使用Memcache和Ruby On Rails默認的內存存儲?

 
config.cache_store = :mem_cache_store, {:namespace => "my_namespace_#{Rails.env}"} 

,這正常工作與命令,如Rails.cache.write(...)

我如何使用ActiveSupport::Cache::MemoryStore我的一些車型,並在同一時間使用memcached的其他我到現在爲止的理由?

我知道ActiveSupport::Cache.lookup_store會還給我一個新的MemoryStore對象。但是,從這一點我不知道如何繼續?例如,我在哪裏放這個命令?我在哪裏存儲結果對象?以後如何從模型代碼中訪問此對象?或者我應該採用完全不同的方式?

在此先感謝您的幫助。

+1

沒有真正回答你的問題,但只是好奇,爲什麼你在你的應用程序需要兩個店? – leonardoborges 2012-01-13 11:28:19

+0

我想我可能會爲我想要立即訪問的某些型號獲得更好的性能。而不是必須進行進程間通信(當memcached在同一臺服務器上)或intermachine通信(當memcached在不同的服務器上時),我將從進程內存訪問我的對象。 – 2012-01-13 11:55:47

+1

但是,我明白了,那是因爲你只有一個進程正在運行。如果你有多個進程,內存存儲將不會被共享,所以如果你的用戶點擊一個沒有加載對象到內存的進程,它會再次打到DB,每個進程有一次。這並沒有真正擴展,總體來說你最好使用memcached。除非你正在運行一個流程應用程序,而且這個應用程序不會很快改變。 – leonardoborges 2012-01-13 12:57:12

回答

2

Rails.cache僅僅是爲了方便您創建了一個緩存存儲。沒有什麼能阻止你做一些像

::MEMORY_STORE = ActiveSupport::Cache::MemoryStore.new 

,然後當你想使用存儲,而不是Rails.cache你會做

MEMORY_STORE.fetch('some_key') {} 

雖然,作爲@leonardoborges評論,我不知道你爲什麼想做到這一點

+0

這個答案几乎是正確的。我已經給你發送了一個小的編輯/修正來使它正常工作。等待你進行糾正,以便我可以接受這個答案。 – 2012-01-16 19:13:14

+0

我看不到編輯請求,但我確實發現了一個錯字 – 2012-01-16 22:13:38

+0

是的。那是我的改正。 (我不知道編輯通知如何與SOW一起工作)。 – 2012-01-17 08:12:08