我网站上的数据库负载变得非常高,所以我是时候缓存那些每小时被调用 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
所以现在当我第一次访问数据库时可以 City.find(1) 但接下来的 1000 次我从内存中得到结果。伟大的。但是大多数对 city 的调用不是 City.find(1) 而是 @user.city.name 其中 Rails 不使用 fetch 而是再次查询 DB ......这很有意义,但不完全是我想要的。
我可以做 City.find(@user.city_id) 但这很难看。
所以我的问题给你们。聪明人在做什么?这样做的正确方法是什么?