2009-04-08 17 views
7

Ho un'applicazione per le rotaie in cui vorrei utilizzare sia la memoria memcached che la cache dell'archivio file, per scopi diversi.Come utilizzare più cache nelle guide?

Desidero utilizzare la cache dell'archivio file per mantenere un numero elevato di pagine che non cambiano spesso (alcune no) - cioè la memorizzazione nella cache delle pagine - e utilizzare memcached per tutto il resto (azione e memorizzazione nella cache DB ecc.). Il motivo è che le pagine memorizzate nella cache dell'archivio file richiedono probabilmente una grande quantità di spazio di archiviazione, ma la maggior parte delle quali verrà utilizzata raramente.

È possibile eseguire o configurare memcached come cache significa che viene anche utilizzato per il caching delle pagine?

Come domanda secondaria, quale è un modo sicuro per rimuovere le pagine dalla cache dell'archivio file in qualche forma di cron job, in quanto non sembra esserci un'opzione per specificare ttl per questa cache. Ad esempio, un comando di ricerca UNIX potrebbe trovare e rimuovere rapidamente tutte le pagine vecchie o le pagine a cui non è stato effettuato l'accesso da molto tempo - è sicuro farlo dato che il server dell'app potrebbe potenzialmente provare a servire una di quelle pagine in quel momento (tho questo è molto improbabile)? Altrimenti, qual è il modo migliore per farlo.

+0

Hai scoperto qualcosa sull'utilizzo di entrambe le cache? Mi piacerebbe farlo anche Al momento stiamo eseguendo Rails 2.0.2, il che a mio avviso lo rende più problematico ... – Chinasaur

+0

Sì, sembra che sia corretto (e predefinito) combinare il caching delle pagine del filestore e (se si configura completamente il memcached) memorizzazione nella cache del resto – frankodwyer

risposta

2

Se si desidera utilizzare il filesystem solo per la memorizzazione nella cache della pagina e memcached per la memorizzazione di operazioni e frammenti nella cache, si sta bene. Il caching delle pagine sempre utilizza il filesystem. Ricorda che la memorizzazione nella cache della pagina ignora l'applicazione Rails, quindi non puoi utilizzarla per le pagine che includono contenuti che cambiano da utente a utente o per pagine controllate da filtri.

Per quanto riguarda la rimozione delle pagine, su Unix, un file può essere eliminato, ma non viene effettivamente rimosso dal disco fino a quando non vengono chiusi tutti gli handle di file aperti. Se il server dell'app ha aperto il file per soddisfare una richiesta e il comando find lo elimina un frazione di secondo dopo, il server dell'app non riceve improvvisamente un errore quando tenta di leggere.

Si potrebbe anche considerare di avere find eliminare file in base al loro ultimo accesso, invece di creazione o modifica, e utilizzando una spazzatrice nell'app Rails per eliminare la pagina cache quando il suo contenuto non è aggiornato.

2

Un approccio più semplice potrebbe essere quello di utilizzare una cache http a monte dell'applicazione come cache di pagina anziché due archivi all'interno di binari. In questo modo puoi utilizzare le intestazioni http per controllare il comportamento della cache, inclusi i TTL. Questi stessi limiti si applicano anche alle cache locali del browser come un bel bonus.

Varnish offre prestazioni elevate, ma richiede la configurazione di un altro componente mobile nell'ambiente di hosting come proxy. Ciò potrebbe comunque valere la pena, a seconda di cosa stai facendo.

Un approccio più semplice potrebbe essere Rack::Cache, che sarà facile da configurare se si utilizza una versione di rack abilitata per rack.

Problemi correlati