La carga de DB en mi sitio se está volviendo realmente alta, así que es hora de almacenar en caché las consultas comunes que se llaman 1000 veces de una hora donde los resultados no cambian. Así, por ejemplo, en mi modelo de ciudad que haga lo siguiente:Rails Caching DB Consultas y mejores prácticas
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
Así que ahora cuando puedo City.find (1) la primera vez que llegué a la base de datos, pero los próximos 1.000 veces me sale el resultado de la memoria. Estupendo. Pero la mayoría de las llamadas a la ciudad no son City.find (1) sino @ user.city.name donde Rails no usa la búsqueda pero consulta el DB nuevamente ... lo cual tiene sentido pero no es exactamente lo que quiero que haga.
Puedo hacer City.find (@ user.city_id) pero eso es feo.
Así que mi pregunta a ustedes, chicos. ¿Qué están haciendo las personas inteligentes? ¿Cuál es la manera correcta de hacer esto?
memoization simplemente envuelve el Rails.cache. No creo que ayude a las asociaciones de modelos que está buscando. – Bill
La memorización no ajusta la memoria caché de Rails. Rails.cache suele ser un almacén de caché compartido entre procesos (por ejemplo, que realmente obtiene beneficios de almacenamiento en caché). La memorización solo ocurre dentro del proceso actual. – Michael