2011-12-01 21 views
1

每次將新內容發佈到我的站點時,我都會爲我的站點的前5個頁面重新生成平面文件緩存。這工作很好,大大減少了服務器負載。平面文件緩存,零停機時間

問題是,每次重新生成文件緩存時,我都會看到流量略有下降,這大概是因爲瀏覽該網站的大約2500人的一些小但不可忽略的百分比看到了一半的生成頁面。

我想知道在php中生成這些緩存頁面的更好方法是沒有任何用戶看到一半頁面的風險。

編輯:

這裏是確定是否加載緩存的文件我的.htaccess文件的部分:

RewriteCond %{HTTP_COOKIE} (user) 
RewriteRule (.*)? - [S=3] # Skip the below 2 lines if the above test passes 
RewriteRule ^$ app/webroot/cache_static_html/cache_static_popular_results_1.php [L] 
RewriteRule ^popular/page:([2-9])$ app/webroot/cache_static_html/cache_static_popular_results_$1.php [L] 
+0

你可以建立平面文件關閉行,然後把它放在與更改頁面同時上? –

回答

0

當您執行清除緩存時,Symfony會遭受同樣的困擾。爲了避免這個問題,我們預熱了緩存。考慮以下幾點:

  • 創建臨時目錄(一定要設置正確的權限):cache_temp

  • 添加代碼來識別觸發。如果觸發器可用,則將高速緩存目錄設置爲cache_temp(而不是cache_current)。通過http例如觸發:http://mydomain.com?prewarm=1

  • 的代碼就知道了產生在cache_temp所有緩存文件,而不是cache_current

  • 重命名cache_current到cache_old

  • 重命名cache_temp到cache_current

  • 刪除cache_old

+0

爲了確保我能理解,我將觸發器設置爲1,然後再啓動整個重命名緩存/重命名操作,然後回到0,以便我知道在操作發生時從cache_temp目錄加載?任何想法如何我可以檢查我的htaccess規則中的觸發器(請參閱我的主要帖子上編輯我的當前htaccess規則)?這個想法是不需要加載我的框架,如果他們應該被提供一個緩存文件,所以能夠處理一些觸發器(或者如果緩存文件存在,文件元數據..)在htaccess中將是理想的。 – makeee

+0

觸發器只會被傳遞,所以您的代碼會知道請求預熱,所以您可以告訴您的框架在cache_temp目錄中而不是在cache_curent目錄中生成所有緩存文件。通過這種方式,所有緩存文件都可用並且可以使用,因此您不會在重負載下爲部分緩存文件提供服務。 –

+0

不確定重寫規則,我們所做的每個請求都通過框架,然後框架計算出要使用的緩存文件。 –

0

我可能會使用內存緩存解決方案建議。似乎你可以很快寫出你的緩存,而不必使用平面文件方法。去記憶!

+0

確保在向用戶緩衝並緩存之前生成內容。 – hookedonit

+0

我使用APC緩存登錄用戶的部分站點,但對於未登錄的用戶,我跳過加載整個站點框架(cakephp)。在我的htaccess中,我檢查「用戶」cookie是否存在,如果不存在,它會重寫爲主頁的緩存文件。 – makeee