我网站上的数据库负载变得非常高,所以现在是时候缓存常见查询,这些查询每小时调用1000次,结果不会发生变化.例如,在我的城市模型中,我执行以下操作:
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
Run Code Online (Sandbox Code Playgroud)
所以现在,当我第一次点击数据库时,我可以使用City.find(1),但接下来的1000次我从内存中得到结果.大.但是大多数对城市的调用都不是City.find(1),而是@ user.city.name,其中Rails不使用fetch但是再次查询DB ...这有意义但不完全是我想要它做的.
我可以做City.find(@ user.city_id),但这很难看.
所以我向你们提问.聪明人在做什么?这样做的正确方法是什么?