Rails缓存记录



Rails.cache缓存记录是个好主意吗?

我想缓存最后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

或者这是一个糟糕的方法?

在大多数情况下,像上面提到的那样简单地缓存查询不会对应用程序产生任何重大影响(除了使代码库变得更复杂之外)(除非你的应用程序获得的流量与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相反。

此外,确保适当的索引存在

也是有意义的

最新更新