私のサイトのDB負荷は非常に高くなっているので、結果が変わらない1時間に数千回呼び出される一般的なクエリをキャッシュするときが来ました。たとえば、私の都市モデルでは、次のようにします。
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)を初めてDBにヒットしたときに、次の1000回は、メモリから結果を取得できるようになりました。素晴らしい。しかし、cityへの呼び出しのほとんどはCity.find(1)ではなく@ user.city.nameであり、Railsはフェッチを使用せずにDBに再度クエリを実行します...これは理にかなっていますが、私が望んでいることとは異なります。
City.find(@ user.city_id)を実行できますが、それは醜いです。
皆さんへの私の質問です。賢い人は何をしていますか?これを行う正しい方法は何ですか?