2011-04-30 19 views
7

En lista de hoy con las preguntas de Django.Django: Invalidar automáticamente la memoria caché cuando los datos cambian a través del panel de administración?

El marco de almacenamiento en caché se ve bastante impresionante y me gustaría utilizarlo en todo el sitio. En lugar de establecer un tiempo de caducidad explícito para mis vistas, prefiero guardarlas en caché indefinidamente y solo invalidar/eliminar la caché cuando cambie el contenido. Escenario de los sueños, ¿verdad?

¿Hay alguna forma de conectar el administrador automático de Django para que cuando se produzca una operación CRUD, se elimine la caché relevante? Supongo que tendré que decirle de alguna manera al panel de administración qué modelo debe invalidar qué clase, pero en principio, ¿es esto posible? ¿Algún tipo de devolución de llamada que puedo agregar? Alguna alternativa?

gracias! Matt

Respuesta

6

dos piezas respuesta:

  1. Borrar caché en un evento de ABM? Fácil como un pastel - use Django signals.

  2. Borrar solo las partes relevantes de la memoria caché? Este es un problema realmente difícil. En la superficie, puede parecer sencillo, pero las dependencias pueden ser muy difíciles de discernir para todos, salvo para los casos más triviales.

Nos especie de resolverse la parte 2 al extender el código de caché de Django para incrustar clase de objeto/información de identificación en el nombre, y luego el almacenamiento en caché en un nivel sub-página. En un evento CRUD, podríamos hacer una expresión regular simple a través de los nombres de elementos en caché y podarlos según sea necesario.

Con todo, creo que fue otro caso de Premature Optimization y no es del todo claro que se hizo ninguna diferencia. La próxima vez esperaré hasta que haya un problema de rendimiento medible comprobado antes de hacer algo como esto.

+0

Interesante, gracias por los enlaces. Puede que tengas razón, sospecho que la lentitud que estoy viendo en la representación de la página podría ser mi ignorancia de cómo funciona Django, SQL sabio, bajo el capó. Volveré a revisar los documentos de ManyToMany y descubriré si podría hacerlo mejor. Tengo la sensación de que estoy ejecutando consultas en cantidades 'n + 1' en ciertos lugares. –

+1

Addendum a lo anterior: acaba de instalar django_debug_toolbar: mi página de inicio actualmente realiza 409 consultas. Es hora de leer sobre cómo optimizar ManyToMany ... –

Cuestiones relacionadas