2016-12-25 102 views
4

我當前的主頁顯示所有可用的類別和每個類別具有的所有帖子數。這當然是在網站上的性能打擊,我只是想知道這是否可以緩存呢?Rails緩存ActiveRecord結果

我不介意緩存是否有點過時,並且如果帖子數量在每次刷新時都不是100%準確的,但我希望它每隔30分鐘左右進行一次查詢。

+0

活動記錄內置了緩存,因此可能會改進SQL查詢而不是編寫自定義緩存代碼。如果你顯示的查詢需要很長時間,也許人們可以給你指示如何優化。 –

+0

當你寫下「每個類別都有的帖子數量」時,你是否已經爲該關聯添加了一個計數器緩存列?另外問題是查詢是應該緩存還是渲染輸出?通常片段緩存可能是要走的路... –

回答

0

ActiveRecord緩存查詢,以便它們不必重新執行。但是,這種緩存不會在請求之間持續存在。查看緩存可能對你更好 - 我會研究片段緩存,可以在這裏找到的rails文檔:http://edgeguides.rubyonrails.org/caching_with_rails.html

但問題的關鍵在於你可以緩存對象,因爲你像這樣渲染它們(從如上所述):

<% @products.each do |product| %> 
    <% cache product do %> 
    <%= render product %> 
    <% end %> 
<% end %> 

這將每個產品寫入鍵/值存儲。它會記錄數據的updated_at時間戳記,以便您不會提供陳舊的數據。

使用上述示例的格式,您可以存儲列出緩存中每個類別的類別和帖子的html。

1

在Rails中,你可以緩存幾乎所有東西。

您可以緩存部分或查詢。你也可以手動過期。

例如

cache('categorylist') do 
    render partial: 'such' 
end 

而在post.rb模型,經過後期的每個創建,重置這一點,並迫使它在下次運行

after_create { 
    Rails.cache.delete('categorylist') 
} 

這樣評價,你的部分將只評估(並寫入緩存)創建新帖子時。所有其他時間,它將從緩存中獲取。