2009-03-03 11 views
7

después de almacenar en caché varias vistas en mi proyecto django - @ cache_page (60 * 5) - Me he dado cuenta de que memcached almacena en caché toda la vista, ¡incluso el argumento de solicitud! Entonces, si el primer usuario que visita una página inicia sesión como userxyz, todos los demás usuarios anónimos o registrados que le pregunten a la misma página recibirán la página almacenada en la memoria caché por el usuario userxyz. Obviamente, este no es un comportamiento deseado ... ¿Puedo guardar todo en la vista, pero no el argumento de solicitud? ¿O Memcached solo es adecuado para sesiones anónimas?solicitud de caché de memcached?

Gracias de antemano, Markos Gogoulos

Respuesta

6

si va a mezclar los datos dinámicos y estáticos en una página, en su caso, los datos dinámicos se registra en el nombre de usuario del usuario, entonces la caché de páginas no es la elección correcta . Esto no cambiaría si estuvieras usando el almacenamiento en caché basado en archivos en lugar de memcached.

Sugiero intentar el almacenamiento en caché de fragmentos. Se puede hacer algo como esto:

{% load cache %} 
{% cache 500 sidebar %} 
    .. sidebar .. 
{% endcache %} 

Esto caché el contenido de la etiqueta de la memoria caché durante 500 segundos con la barra lateral identificador.

Puede encontrar más información sobre el almacenamiento en caché aquí:

http://docs.djangoproject.com/en/dev/topics/cache/


Si se trata de una página que se va a golpear muy a menudo, por ejemplo, una página de bienvenida, que se siente se beneficiarían desde el uso del almacenamiento en caché de páginas sobre el almacenamiento en memoria caché de fragmentos (por ejemplo, los únicos datos dinámicos son el nombre de usuario), entonces hay algunas otras opciones.

Digamos, por ejemplo, que desea tener una página completamente estática excepto una sección de inicio de sesión/cierre de sesión que muestra diferentes enlaces dependiendo de si el usuario ha iniciado sesión o no, puede verificar la existencia de una cookie de autenticación cuando la página se carga por primera vez y muestra de forma condicional datos diferentes mediante javascript.

2

Memcached es solo un back-end. Almacena en caché todo lo que le digas a la memoria caché. Así que realmente tu pregunta es "¿Es el almacenamiento en caché de página completa de Django adecuado para páginas dinámicas?" Probablemente no quiera hacer caché de páginas completas, solo una parte. O sólo las páginas para las solicitudes anónimas (usando CACHE_MIDDLEWARE_ANONYMOUS_ONLY)

referirá al libro http://www.djangobook.com/en/1.0/chapter13/

0

Es posible que desee ver en template fragments y el almacenamiento en caché de contenido de esos bits que no son específicas del usuario.

Cuestiones relacionadas