Magento缓存预热

3
我的团队正在Magento Enterprise Edition上快速启动新商店和视图,但我们遇到了缓存问题。要明确一点,缓存本身运作良好。我们有几个复杂的产品需要约17秒才能构建,但在缓存后,页面加载仅需300毫秒,这非常棒!不幸的是,在任何严重负载(高流量)下清除缓存时,我们似乎会遇到缓存未命中风暴,每个页面请求都试图填充缓存,导致我们的Web服务器停顿并出现大于50的平均负载。

您有什么建议可以避免这种情况吗?是否有记录最佳实践用于预热缓存以进行新代码部署或仅内容和配置更改?

这可能与此相关,因此我会将其包含在内:在单击刷新缓存按钮之后,在刷新过程完成之前,前端大多数页面会死亡,并显示500错误码和看似随机的错误消息。您知道是什么原因吗?


缓存的大小对问题来说并不重要。作为一个相对新手的Magento用户,我正在寻找一种推荐的方法来预热Magento缓存。此外,我想知道为什么一个冷启动或半空的缓存会导致500错误,并显示看似随机、不相关的消息。缓存未命中应该只是重新生成信息并将其添加到缓存中。 - Jake A. Smith
1
我听说过一种Varnish配置设置,您可以向用户发送“旧数据”(因此他会获得快速答案),并在Varnish和Apache / Nginx之间向服务器发送请求,以便缓存预热,并且错失是由Varnish产生的,所以没有问题。但是我不知道这个设置是什么。我对Varnish毫无头绪 :) - Fabian Blechschmidt
1个回答

0
我实现了一个解决方案来在保存CMS块后预热缓存。您可以借鉴这个解决方案来处理不同情况下的操作(产品保存、CMS块、CMS页面、分类保存等)。
使用观察者cms_block_save_after,可以触发此代码片段,在保存CMS块后执行。
/**
 * Clean targeted cache block and warmup if content is provided
 */
public function clearBlockHtmlCache(Varien_Event_Observer $observer)
{

    $block = $observer->getEvent()->getObject();

    $id = $block->getCacheKey();

    // Remove only specific cache block
    Mage::app()->getCacheInstance()->getFrontend()->remove(strtoupper($id));

    // no print, it's ok just warmup cache with filters processing
    $block->toHtml();
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接