2016-08-04 150 views
0

緩存記錄Rails.cache是一個好主意嗎?Rails緩存記錄

我想緩存最後15條記錄並顯示它們。

例如 模型

def last_fifteens 
    last(15).map(&:title) 
    end 

    def cached 
    Rails.cache.write('last_fifteens',last_fifteens,expires_in: 1.hour) 
    end 

    def self.fetch_last_fifteens 
    Rails.fetch('last_fifteens') 
    end 

,比上查看

Product.fetch_last_fifteens 

或者它是一個不錯的辦法?

回答

0

在大多數情況下,緩存查詢與上面提到的一樣簡單,不會對應用程序產生任何顯着影響(除了使代碼庫更復雜)(除非您的應用程序的流量與Twitter或Facebook相當, :))。這種低級別的優化只能在應用程序性能受到監視和基準測試時執行。

不過看上面的示例代碼,代碼可能會改進。有兩種可能的條件

默認範圍不爲模型

你有什麼可擔心的存在。

該模型有一個默認的範圍

它總是一個很好的做法,看看正在形成的查詢。在大多數情況下,解決方案不會是最佳的。例如。

class Location < ActiveRecord::Base 
    default_scope -> { order("locations.name ASC") } 
end 

在這裏的時候,我調用Location.last(15),下面的數據庫查詢將被執行:

SELECT `locations`.* FROM `locations` ORDER BY locations.name asc 

換句話說,我們從數據庫中獲取的所有位置,然後在Ruby中,結果集僅被過濾到最後的15個數組元素。如果位置表具有非常多的條目,那麼我們實際上會獲取所有條目,並將我們的數據集切片到最後的15個條目。

在這種情況下,編寫我們自己的與default_scope相反的方法會更有意義。

此外它是有意義的,以確保存在適當的索引