我確定「全局變量」會讓每個人脖子後面的頭髮站立起來。我想要做的是在一個acts_as_tree數據表中存儲一個分層菜單(完成)。在application_helper.rb中,我通過查詢數據庫並遍歷樹(完成)來創建一個html菜單。我不想爲每個頁面加載執行此操作。Rails 3:緩存到全局變量
這裏是我的嘗試:
application.rb中
config.menu = nil
application_helper.rb
def my_menu_builder
return MyApp::Application.config.menu if MyApp::Application.config.menu
# All the menu building code that should only run once
MyApp::Application.config.menu = menu_html
end
menu_controller.rb
def create
# whatever create code
expire_menu_cache
end
protected
def expire_menu_cache
MyApp::Application.config.menu = nil
end
我的立場正確ñ ow是在第一次加載頁面時,數據庫確實被查詢並建立了菜單。結果存儲在配置變量中,並且數據庫永遠不會再爲此命中。
這是不工作的緩存過期部分。當我將config.menu變量重置爲零時,大概是下一次通過my_menu_builder時,它會檢測到該變化並重建菜單,緩存新的結果。似乎沒有發生。
問題:
是Application.config的好地方來存儲這樣的東西? 有沒有人在這個緩存策略中看到明顯的缺陷?
不要說過早的優化 - 這是我在階段過早的優化迭代:)
謝謝!實現這一
我要將此作爲回答,但要注意,jemminger的是同樣正確的,但不是在它的面前儘可能多的信息。那正是我正在尋找的。 Rails.cache。現在Memcached對這個釘子來說太大了。 – 2011-02-18 06:48:12