Estoy usando Symfony 2 para generar mis páginas a partir de datos en una base de datos MySQL. Para la mayoría de los contenidos, los usuarios deben ser autenticados, pero el contenido en sí mismo no cambia a menudo y no necesita ser personalizado para los usuarios. Entonces, ¿qué es una buena estrategia de almacenamiento en caché para evitar las llamadas a la base de datos mientras se mantiene el control de autenticación?Almacenamiento en caché agresivo del contenido generado mientras se mantiene la información de autenticación
Respuesta
He resuelto esto mediante el uso Zend_Cache interior las acciones almacenables para almacenar el resultado de la plantilla procesada. Luego creo un nuevo objeto Response
a partir del contenido en caché. Si el caché está vacío, genero el contenido.
Pensé en crear un complemento que buscara una anotación y almacenara la salida de respuesta automáticamente, pero resultó que solo tengo 3-4 acciones de visualización que son almacenables y tienen reglas de creación de ID de caché muy complejas, así que puse el la lógica de almacenamiento en caché directamente en el código del controlador.
En pocas palabras, utilice Memcache para almacenar en caché el conjunto de resultados SQL durante un período de tiempo prolongado.
Parece que tiene muchas opciones para almacenar en caché con symphony http://www.symfony-project.org/book/1_2/12-Caching (no para 2 pero creo que no ha cambiado mucho).
Se puede poner las sentencias SQL pesados en su escritura, ya su vez en el almacenamiento en caché para ese guión
list:
enabled: on
with_layout: false # Default value
lifetime: 86400 # Default value
Además si está seguro de que la etiqueta generado no va a cambiar por un tiempo que podría utilizar Symfony dígale al navegador del usuario que ni siquiera moleste a su servidor por el contenido que hará que la página se cargue casi instantáneamente para el usuario.
$this->getResponse()->addCacheControlHttpHeader('max_age=1200'); // in seconds - less than 1 year seconds
Sólo asegúrese de que su edad máxima es lo suficientemente pequeño que cuando algo cambia (por ejemplo una actualización de código) que el usuario no se quedó con la página de edad ya que no hay manera de obligarlos a solicitar que la página de nuevo corto de cambiar la url.
Esto es para Symfony 1. – chiborg
Tal vez esto sea demasiado grande el cambio, pero el siguiente esquema puede ser útil en el caso:
crear varios conjuntos de páginas, una para aún no authed- usuarios (vamos a poner en la raíz del sitio) y otros para usuarios autenticados que deberían ver el mismo contenido (por ejemplo, dos o más deberían ver el mismo contenido cuando se autentican, luego crearemos un solo conjunto para todos ellos) y colocarlo en el directorio bajo la raíz Luego, cree archivos sencillos .htaccess/.htpasswd para cada uno de esos directorios 'for-authed-only' y luego será el problema del servidor web y no su script.
Espero que entiendas la idea. Es confuso decirlo, pero será fácil de implementar.
Ejemplo: supongamos que solo permite que los usuarios autenticados vean la página '/topsecret.html' en el sitio. Cree dir (/ authed), establezca HTTP-auth en él y coloque su topsecret.html en el directorio (para que sea '/authed/topsecret.html'). Ahora edite '/topsecret.html' y simplemente reemplace su contenido principal con el enlace 'lo siento, por favor autentíquese' que apuntará a '/authed/topsecret.html'.
Si usa Symfony2, está utilizando Doctrine2 si utiliza Doctrine2, el almacenamiento en caché debe estar habilitado de forma predeterminada.
Elija su controlador de caché para sus propósitos y no debería haber ningún problema. También podría interesarle específicamente el query result caching.
¡No use Doctrine sin metadatos y caché de consultas! Doctrine es altamente optimizado para trabajar con cachés. Las partes principales en Doctrine que están optimizadas para el almacenamiento en caché son la información de asignación de metadatos con la memoria caché de metadatos y las conversiones DQL a SQL con la caché de consulta .Estas 2 memorias caché requieren solo un mínimo absoluto de memoria, sin embargo, mejoran en gran medida el rendimiento en tiempo de ejecución de Doctrine. El controlador de caché recomendado para usar con Doctrine es APC. APC le proporciona con un código de operación-cache (que es muy recomendable de todos modos) y un almacenamiento de memoria caché muy rápido en memoria que se puede utilizar para los cachés de metadatos y consulta
- 1. ¿JBoss almacena en caché la información de autenticación?
- 2. El entorno de desarrollo Rails 3 mantiene el almacenamiento en caché, incluso sin almacenamiento en caché?
- 3. ASP.NET MVC El almacenamiento en caché varía según la autenticación
- 4. Descanso de la negociación de contenido y almacenamiento en caché
- 5. Almacenamiento de texto formateado en un DB mientras se mantiene la abstracción
- 6. Teoría del almacenamiento en caché
- 7. ¿Dónde se almacena la información en caché en ASP.NET?
- 8. Estrategia de almacenamiento en caché, ¿cuándo el almacenamiento en caché se vuelve inútil?
- 9. Almacenamiento en caché del lado del servidor en openrasta
- 10. Almacenamiento de contenido en caché solo para usuarios no autenticados
- 11. Almacenamiento en caché de DNS usando getaddrinfo
- 12. ¿Se reduce el tamaño de los minivolcados de los programas administrados mientras se mantiene cierta información de pila?
- 13. ¿Filtro de servlet para el almacenamiento en caché del navegador?
- 14. Caché de autenticación mercurial?
- 15. Deshabilitar el almacenamiento en caché del lado del cliente
- 16. Google App Engine - HTML generado en caché
- 17. ¿Cableado del almacenamiento en caché del lado del cliente WCF?
- 18. ¿Almacenamiento en caché de Hibernate?
- 19. Almacenamiento en caché IEnumerable
- 20. Variables de almacenamiento en caché en la variable $ _SESSION?
- 21. Almacenamiento en caché distribuido
- 22. Almacenamiento en caché Salida JSON en PHP
- 23. Almacenamiento en caché de una matriz PHP
- 24. ¿Cómo habilitar el almacenamiento en caché del navegador de contenido estático (imágenes, css, js) con Tomcat?
- 25. Almacenamiento en caché Viewstate?
- 26. Escalado de contenido generado en CSS
- 27. caché de autenticación HTTP
- 28. Almacenamiento de URL mientras Spidering
- 29. Almacenamiento de más información usando FormsAuthentication.SetAuthCookie
- 30. ASP.NET MVC - compresión + almacenamiento en caché
TFM parece tener cierta información decente - http://symfony.com/doc/current/book/http_cache.html - me parece que AppCache tiene todas las cosas que necesita, solo necesita comprobar si la solicitud fue autenticada , o a un recurso no público antes de almacenar en caché la respuesta. – smcphill
Eso no resolverá su problema. Él busca cachear consultas para MySQL no solicitudes HTTP. –