我的網站上的數據庫負載變得非常高,因此我需要緩存常見查詢,這些查詢在結果不變的情況下被稱爲每小時1000次。 因此,例如在我的城市模型我做到以下幾點:Rails緩存數據庫查詢和最佳實踐
def self.fetch(id)
Rails.cache.fetch("city_#{id}") { City.find(id) }
end
def after_save
Rails.cache.delete("city_#{self.id}")
end
def after_destroy
Rails.cache.delete("city_#{self.id}")
end
所以現在當我可以City.find(1)我第一次打DB但接下來的1000次我從記憶的結果。大。但是大多數城市呼叫不是City.find(1),而是@ user.city.name,其中Rails不使用抓取,而是再次查詢數據庫......這是有道理的,但不是我想要的。
我可以做City.find(@ user.city_id)但這很醜。
所以我的問題給你們。聰明人在做什麼?什麼是 正確的方法來做到這一點?
記憶化只是包裝的Rails.cache一些好文章。我認爲這不會幫助您尋找的模特協會。 – Bill 2008-12-05 22:57:15
Memoization不包裝Rails緩存。 Rails.cache通常是進程之間共享的緩存存儲(這樣您實際獲得緩存優勢)。記憶只發生在當前過程中。 – Michael 2008-12-06 05:39:17