2011-12-07 10 views
17

En el administrador de Magento en Administración de caché, ¿qué significa cuando muestra una caché como invalidada? ¿Cómo sabe Magento que un caché está invalidado? En particular, me pregunto sobre HTML Block Cache. ¿Qué condiciones causarían que esta memoria caché se mostrara invalidada?¿Qué significa caché "invalidado" en Magento?

Respuesta

16

En Magento, cada vez que realiza cambios en productos, bloques estáticos, etc., reconoce que los datos en la base de datos ya no son los mismos que los que tiene en la memoria caché. Desafortunadamente, Magento no se da cuenta de qué datos de caché son diferentes, solo que algo es diferente.

Deberá ingresar en Sistema> Administración de caché y actualizar los tipos de caché invalidados.

EDIT:

crear un módulo (o utilizar un módulo existente) que se puede utilizar para configurar una tarea programada para actualizar la memoria caché. Crear un archivo: espacio de nombres {}/{} modulename /Model/Observer.php

Dentro de ese archivo:

<?php 
class <namespace>_<modulename>_Model_Observer { 

    public function refreshCache() { 
    try { 
     $allTypes = Mage::app()->useCache(); 
     foreach($allTypes as $type => $blah) { 
     Mage::app()->getCacheInstance()->cleanType($type); 
     } 
    } catch (Exception $e) { 
     // do something 
     error_log($e->getMessage()); 
    } 
    } 

} 

En su módulo de etc/config.xml:

<config> 
    ... 
    <crontab> 
    <jobs> 
     <{modulename}_refresh_cache> 
     <schedule><cron_expr>* * * * *</cron_expr></schedule> 
     <run><model>{modulename}/observer::refreshCache</model></run> 
     </{modulename}_refresh_cache> 
    </jobs> 
    </crontab> 
    ... 
</config> 

Ahora bien, como Mientras cron esté configurado correctamente en su servidor, la memoria caché se actualizará automáticamente, tan a menudo como se ejecute cron.

+3

Entiendo cómo actualizar la memoria caché, lo que hago cuando veo que se ha invalidado. Simplemente no entiendo cómo sabe que el caché ha sido invalidado. Y relacionado: ¿por qué no actualiza automáticamente el caché si sabe que no es válido? ¿Hay algún riesgo para refrescar el caché? – localfilmmaker

+0

Siempre que realice cambios, magento dispara eventos. Hay oyentes en estos eventos que invalidan el caché relevante. En cuanto a por qué lo hace (y por qué no se actualiza automáticamente), esta es, en última instancia, una decisión de diseño, pero probablemente tiene algo que ver con poder representar el contenido. Por ejemplo, puede hacer cambios en varios productos que se relacionan entre sí, y luego puede actualizar el caché. He superado esto con un trabajo cron que se ejecuta cada vez que cron se ejecuta en el servidor y llama a una función para actualizar el caché automáticamente. Editaré mi respuesta original para incluir el código. –

+3

Solución muy mala: configurar un cron que actualice todo el caché, cada vez que se ejecuta, es como deshabilitar el caché ... al menos debes verificar si el caché está invalidado y configurar el cron cada 10/30 minutos ... – WonderLand

1

2015: AOE Sheduler puede limpiar el caché mediante cronjob. cambio de trabajo

"core_clean_cache"

de 30 2 * * * (Diario 2:30) a 59 * * * * (cada 59 minutos).

0

La respuesta de @Magento Guy es correcta, pero creo que esta solución a continuación puede ayudarlo a actualizar solo los cachés invalidados en Magento.

Uso Bitnami Magento Stack, para mí esta solución a continuación fue la mejor que he encontrado.

He intentado crear un archivo php Mage_Shell_Class, pero sin éxito (matriz de caché no válida siempre estaban vacías cuando se ejecuta, no importa qué, y realmente no me imagino por qué).

He creado un archivo php 'sample.php':

<?php 

require 'app/Mage.php'; 

$invalid = Mage::app()->getCacheInstance()->getInvalidatedTypes(); 

foreach($invalid as $i) 
{ 
    Mage::app()->getCacheInstance()->cleanType($i["id"]); 
} 

he colocado en la carpeta raíz de Magento, y para iniciarlo utilizo una tarea programada que se ejecuta bajo el usuario raíz.

Por lo tanto, para crear la tarea programada en el usuario root:

sudo crontab -u root -e 

y esta fue mi línea de comando para ejecutarlo:

* * * * * . /opt/bitnami/scripts/setenv.sh ; /opt/bitnami/php/bin/php /opt/bitnami/apps/magento/htdocs/sample.php >> /var/log/cron/cron.log 2>&1 

Algunas partes de esta línea son muy particulares a mi problema :

  1. Como solo actualiza las cachés invalidadas, he decidido ejecutarlas cada minuto.
  2. setenv.sh es una secuencia de comandos que me ayuda a establecer el entorno cuando se trata de esta pila de bitnami en particular.
  3. Para obtener el resultado de este script, utilicé esta última parte ">> /var/log/cron/cron.log 2> & 1" para generar errores en un directorio que he creado (/ var/log/cron), y le ha dado los permisos correctos.

Probablemente necesite cambiar el comando de línea cron, pero creo que esto lo ayudará.

Cuestiones relacionadas