Итак, Кэширование - это то, что меня смущает больше всего в Magento, так как для большинства других я уверен. В настоящее время один из сайтов, на которых мы работаем, находится на Enterprise и, конечно же, использует FPC. Проблема в том, что у нас есть обновление инвентаря, которое выполняется каждые 15 минут. Многие заказы размещаются в CSR по телефону и через каталог во внешнюю систему за пределами Magento.
Каждые 15 минут запускается script, чтобы проверять любой инвентарь в этой системе и видеть, отличается ли он от того, что находится в Magento. Если есть разница, инвентарь обновляется в Magento. Используя все методы Magento, нет sql или ничего подобного.
У нас всегда были проблемы с кешированием, и они пытались использовать все новейшие методы, когда они выходят. Последний, который мы пытаемся сделать, это Redis, и у нас был хороший успех на других сайтах. Тем не менее, мы все еще видим сумасшедшую нагрузку на сервер, и очевидно, что страницы не кэшируются.
После копания в коде появляется, что после того, как все сохраненные контроллеры сохраняют или сохраняют его, он видит, что кеш должен быть недействительным. Похоже, что изменение любого атрибута, ну, по крайней мере, инвентарь будет отмечать FPC, поскольку он должен быть недействительным.
Я запутался в том, что означает недействительность, потому что некоторое время назад у нас был вопрос к поддержке клиентов о чем-то подобном, и это был ответ
Кэш полной страницы недействительное состояние при любых изменениях в продуктах, категориях, CMS даже когда запасы уменьшаются после продажи.
Теперь, когда кеш полностраницы попадает в недействительное состояние, это не означает что что-то изменилось на вашем интерфейсе, однако любые примененные изменения после последнего обновления не будет отображаться во внешнем интерфейсе.
Однако, если FPC, подтвержденное во все времена, является обязательным для вашего бизнес-логику, вы, безусловно, можете настроить свою установку Magento на обновлять его автоматически через функциональность cron так часто, как вы желание.
Однако во всех тестах, которые я сделал, на обоих версиях 1.9 и 1.11 Enterprise появляется, когда FPC недействителен, ответ не извлекается из кеша. Что противоречит тому, что они говорили об этом, просто не имея новых обновлений.
Есть ли что-то, что мне не хватает? Кто-нибудь имеет хорошее объяснение того, как недействительность работает в Magento специально для FPC или любых хороших ссылок, чтобы полностью понять процесс и код?
Вы можете попробовать это самостоятельно для любой страницы с полной кешей. Но я понимаю, что метод processRequest
в /app/code/core/Mage/Core/Model/Cache.php
должен устанавливать содержимое тела с кешированным ответом и возвращать true, если страница кэшируется.
Чтобы проверить, перейдите на любую страницу, убедитесь, что вы ее кешировали и возвращаете true. Входите и отредактируйте продукт, в нашем случае количество. Это приведет к недействительности FPC. Однако теперь, когда вы загружаете страницу, которая была кэширована, прежде чем она вернет false в этом методе, а не будет кешированной страницей. Я не знаю, насколько это правильно, если вы можете сказать, что страница кэширована или нет, но именно там мое исследование ведет меня. Пожалуйста, поправьте меня, если я ошибаюсь.
UPDATE: При дальнейшем исследовании я обнаружил, что при сохранении продукта в администраторе действие контроллера
Mage_Adminhtml_Catalog_ProductController::saveAction()
вызовет следующий метод
Mage::getModel('catalogrule/rule')->applyAllRulesToProduct($productId)
Затем в классе Mage_CatalogRule_Model_Resource_Rule
вызывается метод applyAllRulesForDateRange
и который отключает событие
catalogrule_after_apply
Какой модуль полной страницы просматривает и запускает метод чистого кэша для тега FPC. По сути, удаление всех записей кеша FPC.
Я не понимаю, почему это необходимо, если до этого логика очищает записи FPC, привязанные к тегам продукта и категории. Это ошибка?