2013-01-16 51 views
3

我和我的團隊正在迅速推出Magento Enterprise Edition的新商店和視圖,但我們遇到了緩存問題。要清楚的是,緩存部分本身效果很好。我們有幾個複雜的產品需要大約17秒的時間來構建,但是在緩存後,頁面會在300毫秒內加載,這非常棒!不幸的是,如果我們在任何嚴重負載(高流量)下清除高速緩存,我們似乎遇到緩存缺失風暴,其中每個頁面請求都試圖填充緩存,導致我們的webhead以超過50的負載平均值失速。Magento Cache Warming

你有什麼建議可以避免這種情況嗎?是否有文件介紹了爲新代碼部署甚至只是內容和配置更改預熱緩存的最佳實踐?

這可能是相關的,所以我會包含它:點擊按鈕刷新緩存之後,在刷新過程完成之前,前端的大部分頁面會死亡,並顯示500個錯誤代碼和看似隨機的錯誤消息。任何想法可能會導致什麼?

+0

緩存的大小真的與問題無關。作爲Magento相對較新的用戶,我正在尋找一種推薦的方式來升溫magento緩存。此外,解釋爲什麼冷或半空緩存會導致500個錯誤,看似隨機,無關的消息。緩存未命中應該簡單地重新生成信息並將其添加到緩存中。 –

+1

我聽說過一個清漆配置設置,在這裏你可以發送用戶「舊數據」(所以他得到了一個快速的答案),併發送一個請求到varnish和apache/nginx之間的服務器,所以緩存變暖,缺失是從清漆,所以沒問題。但我不知道,這是什麼設置。我不知道從清漆:) –

回答

3

你需要做一些緩存升溫。創建一個後端腳本,將頁面加載到緩存中。像這樣的東西可能會起作用:http://erikriffs.com/web-server-cache-warming-by-crawling-sitemaps/

+0

我們絕對可以創建一個蜘蛛抓取整個多個網站的各種網頁,但它似乎像一個像magento一樣強大的平臺將有一個更優雅和優化的方式來做到這一點。尤其是在爲企業解決額外緩存後:) –

+2

這似乎是合乎邏輯的事情,不是嗎?歡迎來到Magento。 = D – Ryre

+0

@吐司我注意到哈哈 –

0

我實施了一個解決方案,在CMS塊保存後預熱緩存。您可以從這個解決方案的靈感中針對不同情況(產品保存,CMS塊,CMS頁面,類別保存等)執行相同操作。

這段代碼可以在通過使用觀察者cms_block_save_after

/** 
* 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(); 
}