2013-02-28 27 views
0

我們有一個在線php搜索實用程序,我們希望通過緩存結果頁來提高性能,以便當用戶在第一個頁面之後執行相同搜索時可以顯示它們一個用於從數據庫中檢索相同的數據。如何索引緩存的動態php頁面以及如何僅保留最新頁面

我做了同樣的閱讀,我理解檢查靜態緩存頁是否存在於PHP腳本的開始處,並且如果不在底部創建它的簡單想法。

我的問題

1)什麼是做對的情況下緩存的靜態網頁搜索,我們有很多(千)的最好方法?

2)什麼是最好的方法來保持過去24小時只有靜態頁面,並刪除舊的不相關的頁面。

希望您能分享相關經驗或有趣的想法,幫助我們爲我們的網站創建一個好的緩存系統。

感謝

回答

0

減少到哈希有兩種可能的選擇,取決於你的硬件最適合:

  • stat ic緩存:每次搜索時,創建一個靜態html頁面(不需要php)並將其保存在磁盤上。創建一個apache可以理解的物理路徑,這樣當HTML不存在時,將調用一個PHP文件,並在調用該文件時調用該靜態文件。這是使用mod_rewrite。使用cron作業使用創建文件的時間清除舊頁面。
  • 使用數據庫:創建一個包含鍵列(即搜索字符串),創建時間戳和結果頁(即完整呈現輸出)的表。

在這兩種情況下,如果緩存存在,請使用它。使用cron進程刪除陳舊的緩存條目。

+0

任何想法更快 - 從索引鍵(100個字符)的10,000行數據庫表中搜索一行或搜索具有10,000個文件的文件夾中的文件名相同的鍵? – 2013-03-01 01:14:09

+0

它確實取決於你的服務器。如果它是虛擬化的,或者你的磁盤速度很慢(SATA),I/O是瓶頸,因此數據庫總是會更快(假設索引varchar作爲鍵)。 如果您正在使用企業解決方案(例如高性能SAN上的iSCSI掛載存儲),Apache可以勝過它。如果你走這條路線,你應該定義一個文件夾方案,以避免在一個目錄中有數十個文件 - 更好地使用文件夾結構中的部分密鑰。 – hexblot 2013-03-01 08:38:01

0
  1. 使用散列(如MD5)是基於輸入:查詢,頁面,過濾器設置等

  2. 保持對緩存的到期日期。


如果你有複雜的輸入,說:

$input = array(
    "query" => "foo", 
    "filter" => array(
     "category" => "movies" 
    ), 
    "page" => 1 
); 

您可以輕鬆地這樣通過md5(serialize($input));

+0

我認爲md5非常昂貴 - 如果我們的目標是最大限度地減少服務器任務,爲每個呼叫做這些轉換可能不是最好的解決方案 - 我是對的嗎? – 2013-03-01 01:11:58

+0

'md5'這幾天非常快。你可以替代你的首選算法。 – Halcyon 2013-03-01 01:21:25