La charge DB sur mon site devient très élevé donc il est temps pour moi de mettre en cache des requêtes communes qui sont appelées 1000s de fois par heure où les résultats ne changent pas. Ainsi, par exemple, sur mon modèle de ville je fais ce qui suit:Rails DB Requêtes et Mise en cache les meilleures pratiques
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
Alors maintenant quand je peux City.find (1) la première fois que je frappe la DB, mais les 1000 prochaines fois que je reçois le résultat de la mémoire. Génial. Mais la plupart des appels à la ville ne sont pas City.find (1), mais @ user.city.name où Rails ne pas utiliser l'opération d'extraction mais interroge à nouveau la DB ... ce qui est logique, mais pas exactement ce que je veux faire.
je peux faire City.find (@ user.city_id), mais ce qui est laid.
Donc ma question à vous les gars. Que font les gens intelligents? Qu'est-ce que la bonne façon de le faire?
memoization enveloppe juste la Rails.cache. Je ne pense pas que cela aidera les associations modèles comme vous le souhaitez. – Bill
La mémorisation n'emballe pas le cache Rails. Rails.cache est généralement un magasin de cache partagé entre les processus (de sorte que vous obtenez réellement des avantages de mise en cache). La mémorisation ne se produit que dans le processus en cours. – Michael