2016-08-04 81 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相反的方法会更有意义。

此外它是有意义的,以确保存在适当的索引