Rails Caching von DB-Abfragen und Best Practices
Die Datenbanklast auf meiner Website wird sehr hoch. Daher ist es an der Zeit, häufige Abfragen, die 1000-mal pro Stunde aufgerufen werden und deren Ergebnisse sich nicht ändern, zwischenzuspeichern. So mache ich zum Beispiel auf meinem Stadtmodell folgendes:
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
So jetzt, wenn ich City.find (1) das erste Mal kann, wenn ich die DB drücke, aber die nächsten 1000 Male bekomme ich das Ergebnis aus dem Speicher. Groß. Die meisten Aufrufe von city sind jedoch nicht City.find (1), sondern @ user.city.name, wobei Rails den Abruf nicht verwendet, sondern die DB erneut abfragt.
Ich kann City.find (@ user.city_id), aber das ist hässlich.
So meine Frage an euch. Was machen die Schlauen? Was ist der richtige Weg, um dies zu tun?