dan*_*des 21 php caching magento redis
所以缓存当然是让我在Magento中最让我困惑的事情,就像我对其他大多数人一样.目前我们工作的网站之一是企业版,当然也使用FPC.问题是,我们有一个每15分钟运行一次的库存更新.通过电话向CSR公司下达了大量订单,并通过目录将订单发送到Magento以外的外部系统.
每15分钟运行一次脚本来检查该系统中的任何库存,看它是否与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而不是缓存页面.我不知道这是否准确无法判断页面是否被缓存,但这是我的调查引导我的地方.如果我错了,请纠正我.
更新:经过进一步调查,我发现当您在管理员中保存产品时,控制器操作
Mage_Adminhtml_Catalog_ProductController::saveAction()
将调用以下方法
Mage::getModel('catalogrule/rule')->applyAllRulesToProduct($productId)
然后在Mage_CatalogRule_Model_Resource_Rule
类applyAllRulesForDateRange
中调用该方法并触发该事件
catalogrule_after_apply
整页缓存模块正在观察并触发FPC标记的干净缓存方法.基本上删除所有FPC缓存记录.
如果之前的逻辑是清除与产品和类别标签绑定的FPC记录,我不明白为什么这是必要的.这是一个错误吗?
FPC 正在观察库存变化,因为其目的是显示任何已减少至零库存的产品缺货。解决方法是在产品达到零时创建事件调度,而不是每次任何产品更改库存时创建事件调度,并重写 FPC 以观察该事件而不是原始事件。
另一种方法是仅使与正在更新的产品相关的缓存部分无效,但这将是一个相当重要的架构更改。
归档时间: |
|
查看次数: |
11447 次 |
最近记录: |