2009-04-08 20 views
7

Tengo una aplicación de rieles en la que me gustaría usar tanto el memcached como el caché de la tienda de archivos, para diferentes propósitos.¿Cómo usar múltiples cachés en los rieles?

Quiero usar la caché de la tienda de archivos para mantener un gran número de páginas que no cambian a menudo (algunas no) - es decir, caché de páginas - y usar memcached para todo lo demás (acción y almacenamiento en caché DB, etc.). La razón es que las páginas almacenadas en el caché de la tienda de archivos probablemente requieran una gran cantidad de almacenamiento, pero a la mayoría se accederá con poca frecuencia.

¿Es esto posible o se configurará Memcached como la memoria caché significa que también se utiliza para el almacenamiento en caché de página?

Como una pregunta secundaria, ¿cuál es una forma segura de eliminar páginas de la memoria caché de la tienda de archivos en alguna forma de tarea cron, ya que no parece haber una opción para especificar ttl para esta memoria caché. Por ejemplo, un comando de búsqueda de UNIX encontraría y eliminaría rápidamente todas las páginas o páginas antiguas a las que no se haya accedido en mucho tiempo. ¿Es seguro hacerlo dado que el servidor de la aplicación podría intentar servir una de esas páginas en ese momento (aunque esto es muy poco probable)? Si no, ¿cuál es la mejor manera de hacer esto?

+0

¿Has descubierto algo sobre el uso de ambas memorias caché? Me gustaría hacer esto también. Sin embargo, actualmente estamos ejecutando Rails 2.0.2, lo cual creo que lo hace más problemático ... – Chinasaur

+0

Sí, parece que está bien (y es el predeterminado) combinar el almacenamiento en memoria caché de las páginas del archivo y (si configura Memcached en absoluto) la memoria almacenamiento en caché del resto – frankodwyer

Respuesta

2

Si desea utilizar el sistema de archivos solo para el almacenamiento en caché de páginas y memoria para la acción y el almacenamiento en caché de fragmentos, está bien. El almacenamiento en caché de la página siempre usa el sistema de archivos. Solo recuerde que el almacenamiento en caché de páginas omite su aplicación Rails, por lo que no puede usarla para páginas que incluyen contenido que cambia de usuario a usuario o para páginas que tienen control de acceso con filtros.

En cuanto a la eliminación de páginas, en Unix, se puede eliminar un archivo, pero en realidad no se elimina del disco hasta que se cierren todos los identificadores de archivo abiertos. Si el servidor de aplicaciones ha abierto el archivo para atender una solicitud y el comando de búsqueda lo elimina una fracción de segundo más tarde, el servidor de la aplicación no recibe un error de repente cuando intenta leer.

También podría considerar tener find eliminar archivos en función de su última hora de acceso, en lugar de creación o modificación, y usar una barredora en su aplicación Rails para eliminar la página almacenada cuando su contenido no está actualizado.

2

Un enfoque más simple puede ser utilizar una memoria caché http aguas arriba de la aplicación como la memoria caché de la página en lugar de dos tiendas dentro de los rieles. De esta forma, puede usar encabezados http para controlar el comportamiento de la memoria caché, incluidos los TTL. Estos mismos límites también se aplicarán a los cachés locales del navegador como una buena bonificación.

Varnish es tan alto como se puede obtener, pero requeriría configurar otra pieza móvil en su entorno de alojamiento como un proxy. Esto aún puede valer la pena dependiendo de lo que esté haciendo.

Un enfoque más simple podría ser Rack::Cache, que será fácil de configurar siempre que esté utilizando una versión de raíles habilitada para bastidor.

Cuestiones relacionadas