2010-05-12 78 views
1

我有一個主頁有幾個獨立的動態部分。這些部分包括公司最近的新聞列表,站點統計面板以及某些員工的在線狀態。最近的新聞每月更新一次,網站統計信息每天都在變化,而在線狀態會在每分鐘基礎上發生變化。我想緩存這些面板,以便數據庫不會在每次頁面加載時被擊中。如何選擇什麼以及什麼時候用ob_start緩存數據而不是查詢數據庫?

是否使用ob_start()然後ob_get_contents()將這些部分緩存到文件正確的方式來做到這一點,或者是否有更好的方法在PHP5中這樣做?

在問這個問題,我試圖回答這些額外的問題:

  • 我如何確定緩存沒有做廣泛的基準測試這個數據正確的做法?
  • 將這些部分緩存在不同的文件中,然後根據請求將它們連接在一起是有意義的,還是應該每分鐘重新查詢一次數據和緩存?

我在尋找拇指的規則計劃頁面和地方做測試是很不划算的情況下(客戶端未給予足夠爲它我的意思)。

回答

1

雖然不是最好的原則進行的拇指......在沒有任何明確的要求,我將讓你的SLA(期望,預測,預期,或已知的)指導你的戰略爲出發點。一般來說,我們都知道緩慢或不太可靠的鏈接在哪裏。這些可能是下游系統,緩慢的網絡鏈接,緩慢的數據庫查詢,轉換等等。思考緩存作爲緩解資源不足,低於SLA或妨礙用戶體驗的一種緩解措施,至少有一條謹慎的路線思維。至少你必須做一些後面的餐巾紙計算,但更低的保真度數字是一個好的開始。

+0

+1回覆良好。我沒有考慮使用緩存作爲停用資源的替代方案。 – 2010-05-16 15:17:52

0

不,輸出緩衝與數據庫緩存沒有任何關係。

但大拇指的規則是:將所有這些東西獨立出來,直到您意識到該網站確實需要一些性能改進爲止。
然後做一些分析。
最後,消除瓶頸。最有可能的不是這些數據庫調用。

+1

輸出緩衝可用於緩存呈現的HTML。您在數據庫訪問時渲染一次,將呈現的HTML存儲在平面文件中,並且將來的請求會擊中該平面文件而不需要擊中數據庫。 – ceejayoz 2010-05-12 17:53:15

+0

我一直在緩存使用輸出緩衝從db查詢產生的表格的最終html渲染。我打算將從查詢收到的數組序列化爲一個文件。雖然這一點直到災難發生,但這是我目前的默認方法。 – 2010-05-12 17:57:54

+0

@Tim那不是「等待災難」的方法。那就是「修理已經壞了,不是隨機的」方法。 – 2010-05-12 18:01:41

相關問題