2012-06-11 11 views
20

Así almacenamiento en caché, por supuesto, es lo que más me en Magento confunde, como lo hace la mayoría de los otros que estoy seguro. Actualmente, uno de los sitios en los que trabajamos está en Enterprise y utiliza FPC, por supuesto. El problema es que tenemos una actualización de inventario que se ejecuta cada 15 minutos. Se realizan muchos pedidos a CSR por teléfono y a través de un catálogo en un sistema externo fuera de Magento.¿Por qué importa Magento La invalidación de la página índice almacenamiento en caché de producto Excepto en realidad hacen una página no almacena en caché y lo que refrescar hacer, ya que no se almacena en caché

Cada 15 minutos se ejecuta un script para comprobar cualquier inventario en ese sistema y para ver si es diferente entonces lo que es en Magento. Si hay una diferencia, entonces el inventario se actualiza en Magento. Usando todos los métodos de Magento, sin sql ni nada de eso.

Siempre hemos tenido problemas de almacenamiento en caché y he probado todas las últimas técnicas cuando salen. El último que estamos intentando es Redis, y hemos tenido mucho éxito en otros sitios con él. Sin embargo, todavía estamos viendo una carga loca en el servidor y es evidente que las páginas no están en la memoria caché.

Después de la excavación en el código parece que nunca después de cada modelo de guardar o controlador de administración de producto Excepto que se ve a ver si caché necesita ser invalidado. Parece que cambiar cualquier atributo, bueno al menos el inventario marcará que FPC necesita ser invalidado.

estoy confundido acerca de lo que significa la invalidación, ya que hace un tiempo que tenía una pregunta a la atención al cliente por algo similar y esta fue la respuesta

Caché de página completa se llega a estado invalidado a cualquier cambio en los productos, categorías, CMS incluso cuando el stock se reduce después de una venta.

Ahora, cuando la caché de página completa llega a invalidado estado Esto no quiere decir que algo ha cambiado en su interfaz sin embargo cualquier cambio aplicado después no se mostrará la última actualización en la interfaz.

Sin embargo, si tiene la FPC validado en todo momento es una necesidad para su lógica de negocio ciertamente se podría configurar su instalación de Magento a actualizar de forma automática a través de la funcionalidad de cron con la frecuencia que deseo.

Sin embargo, en todas las pruebas que he realizado, tanto en 1.9 como en 1.11 Enterprise, parece que cuando se invalida FPC, la respuesta no se extrae de la memoria caché. Lo cual es contradictorio con lo que han dicho acerca de que simplemente no tiene las actualizaciones más recientes.

¿Hay algo que me falta? ¿Alguien tiene una buena explicación de cómo funciona la invalidación en Magento específicamente para FPC o cualquier enlace bueno para comprender completamente el proceso y el código?

Puede probar esto usted mismo para cualquier página que esté en la página completa en caché. Pero entiendo que el método processRequest en /app/code/core/Mage/Core/Model/Cache.php debe establecer el contenido del cuerpo con la respuesta en caché y devolver verdadero si la página está en caché.

Para probar ir a cualquier página de asegurarse de que lo tienes en caché y volviendo realidad. Ingrese y edite un producto, en nuestra cantidad de casos. Esto invalidará a FPC. Sin embargo, ahora cuando carga la página que estaba almacenada en la memoria caché, devuelve falso en este método y no es una página en caché. No sé si esto es correcto para poder decir si una página está almacenada en la memoria caché o no, pero a eso me lleva mi investigación. Por favor, corríjame si estoy equivocado.

ACTUALIZACIÓN: Tras realizar investigaciones adicionales que han encontrado que cuando se guarda un producto en la administración, la acción del controlador

Mage_Adminhtml_Catalog_ProductController::saveAction()

llamará al siguiente método

Mage::getModel('catalogrule/rule')->applyAllRulesToProduct($productId)

Entonces en la clase Mage_CatalogRule_Model_Resource_Rule, se llama al método applyAllRulesForDateRange y se activa el evento

catalogrule_after_apply

cual el módulo de la página índice de caché está observando y disparando el método de caché limpia para la etiqueta FPC. Borrando esencialmente todos los registros de caché de FPC.

no veo por qué esto es necesario si antes de esta lógica es el borrado de grabación de FPC que están vinculados a las etiquetas de productos y categoría. ¿Es esto un error?

+0

sé que esto no responde directamente a su pregunta, pero sólo quiero señalar que su rendimiento no debería ser peor que si todos los pedidos se realizaran a través de Magento, ya que después de cada venta su stock disminuiría inv alidar su caché de la misma manera que lo hace su trabajo cron. – nachito

+0

Es cierto que veo su punto allí. Entonces simplemente no tiene ningún sentido en cuanto a por qué la página no se almacena en la memoria caché cuando se invalida por primera vez. –

+0

Esta no es la respuesta que desea, pero he hablado con otros desarrolladores de Magento, y ninguno de nosotros ha tenido un éxito real con el stock FPC. Simplemente nos causa problemas. Por lo general, terminamos usando Varnish o algún otro caché de proxy inverso. Mantenerlo separado de las partes internas, que ya son bastante complicadas. –

Respuesta

1

FPC está observando los cambios en el inventario porque la intención es mostrar que no hay stock para los productos que han disminuido a stock cero. La solución sería crear un despacho de eventos cuando un producto llegue a cero en lugar de cada vez que un producto cambie de stock y reescribir FPC para observar ese evento en lugar del original.

Otro método sería sólo para invalidar las porciones de caché correspondientes a los productos que se actualizan, pero esto sería un cambio de arquitectura bastante significativo.

0

el módulo de caché de página Phoenix borra las páginas de productos y páginas de categorías, pero deja algunas áreas de la invalidación de caché descubiertas. tampoco funciona bien con contenido dinámico.

tal vez usted debe comprobar fuera del módulo aoe_static la que hace un gran trabajo de cargar contenido dinámico mediante la carga de un diseño predeterminado y la prestación de los bloques con una llamada AJAX. esta llamada ajax también establece la cookie para permitir sesiones.

Tienes que tener cuidado con 2 módulos en una zona bastante difícil, tal vez debería ver esta magento open source full page cache

0

tener una lectura del artículo que escribí sobre la página índice almacenamiento en caché en Magento. ¡Destaca una corrección de errores que de repente hace que todo el mecanismo de caché tenga sentido!

http://www.excitedcroc.com/article/why-the-magento-full-page-cache-doesnt-expire

Esencialmente hay un error en la forma Magento utiliza el mecanismo de almacenamiento en caché de Zend Framework.

La cuestión es que las clases de caché biblioteca Zend y las clases de caché empresa Magento utilizan una mezcla de null y falso en sus funciones que producen el valor de la vida. Debido a null! == false, siempre se utiliza una duración predeterminada de 10 días. El problema proviene de la función processRequestResponse en la aplicación/code/core/Enterprise/PageCache/Model/Processor.php. Debido a que no se pasa ningún valor de por vida a la instancia de caché al guardar, se establece de manera predeterminada en nulo.

Cambiar el valor predeterminado para el parámetro de tiempo de vida de la función de salvar de la aplicación/código/core/Mago/Core/modelo/cache.php van a resolver ese problema. Simplemente establézcalo en falso en lugar de nulo (el artículo vinculado arriba explica completamente por qué).

- Función pública save ($ data, $ id, etiquetas $ = array(), $ Vida útil = null)

+ función pública o guardar datos ($, $ id, $ tags = array(), $ Vida útil = falso)

+0

El enlace solitario se considera una respuesta pobre (ver [eliminación de faq #]) ya que no tiene sentido por sí mismo y ** no se garantiza que el recurso objetivo esté vivo en el futuro **. [Sería preferible] (http://meta.stackexchange.com/q/8259) incluir aquí las partes esenciales de la respuesta y proporcionar el enlace de referencia. – j0k

+0

Actualizar como arriba .. –

2

Usted deberá crear un nuevo controlador paso a paso a medida Mage_Index_Model_Indexer_Abstract, y crear un nuevo modelo de recursos métodos aPI con los trabajos de cron

Cuestiones relacionadas