2009-05-09 18 views
14

dato che le trascrizioni del database nella nostra app richiedono sempre più tempo, abbiamo iniziato a utilizzare memcached per ridurre la quantità di query passate a MySQL.Le migliori pratiche per l'utilizzo di memcached in Rails?

Tutto sommato, funziona perfettamente e consente di risparmiare molto tempo.

Ma, come la cache è stato "silenziosamente apparire" come una soluzione per dare l'applicazione più succo, un sacco di nostri modelli ora contiene il codice come questo:

def self.all_cached 

    Rails.cache.fetch('object_name') { 

    find(

     :all, 
     :include => [associations]) 

    } 

end 

Questo sta diventando sempre più un dolore come riempimento e il lavaggio della cache avviene in diverse classi attraverso l'applicazione.

Ora, mi chiedevo se esistesse un modo migliore per astrarre la logica memcached per renderla più potente e facile da usare su tutti i modelli necessari?

Stavo pensando di avere una sorta di modulo memcached che è incluso in tutti i moduli necessari.

Ma prima di suonare in giro, ho pensato: Chiediamo esperti prima :-)

Grazie

Matt

risposta

13

Vorrei raccomandare di verificare i plugin esistenti, i due grandi sono cache_fu e cache money. Per il vostro caso d'uso in cui si desidera caricare il modello con le sue associazioni su di cache che vi consiglio vivamente di provare cache di denaro, che fa quasi automaticamente:

def parent < ActiveRecord::Base 
    has_many children 
end 

def child < ActiveRecord::Base 
    index :parent_id 
end 

#now you can do the following without ever hitting the DB 
parents = Parent.find :all 
parents.each{ |p| p.children } 

Il veramente grande vittoria con cache denaro è che quando si scala fino al punto in cui il ritardo di replica del database diventa un problema, scrivere nella cache salva il culo. Questo è particolarmente importante con Rails dove il ritardo di replica può facilmente causare 500 errori e generalmente è un incubo che non si vuole avere.

5

Sì, avere un modulo memcached di includere in tutti i modelli che ne avete bisogno credo sia la soluzione migliore. La tua linea di pensiero è superba :)

+1

Grazie, funziona brillante. – Matt

+3

puoi consigliarne uno o stai dicendo di scriverne uno da zero? questa risposta non sembra completa –

Problemi correlati