2009-10-05 104 views
5

我一直在尋找使用php的中小型網站的HTML /文本內容緩存。我主要是保存網站的動態導航菜單,從DB生成HTML報告等。主要是我正在尋找基於會話的緩存(這是一個壞主意?)。它也可以是基於文件的。Php針對中小型網站的簡單緩存技術

任何現有的解決方案,非常感謝。例如,Zend Framework以其鬆散耦合的組件而聞名。所以,Zend_Cache可以成爲候選人,但找不到基於會話的緩存適配器。而且,它不是完全獨立的組件。任何人都可以告訴我需要使用Zend_Cache的類是什麼?

另一個選擇是PEAR的--Cache_Lite,你最近怎麼做?

有沒有其他的框架,從哪裏我可以很容易地分開緩存組件,並使用它較少的學習曲線?

謝謝。

+0

讓我們假設我的共享託管服務器不支持APC或memcached的,所以我需要實現我自己的緩存機制。 – 2009-10-05 19:57:54

回答

2

Memcached是一個非常輕量級且高效的解決方案。

但是,您也可以緩存簡單文件中的內容。文件系統通常很快,並且可以毫無問題地處理讀/寫鎖。而且不需要任何花哨的圖書館來處理...功能filemtime,file_put_contentsfile_get_contents都是你需要的。

  1. 檢查緩存是否被寫入了N多secondes前與filemtime()
  2. 如果它太舊,生成內容,並將其與file_put_contents()寫
  3. 如果沒有,只需加載它的機智file_get_contents()函數

編輯:我會添加一個鏈接到那個帖子我在幾個月前提出:Best Solution for caching。這不是完全的主題,但它可能會幫助你在你的研究:)

0

你可以看看CakePHP中的緩存。我懷疑你能夠將其與框架工作分開,但它應該有助於你理解如何緩存動態內容。

1

基於會話的緩存可能不是一個好主意。這僅適用於需要緩存每個用戶的特定結果的有限情況(不適用於所有人)。

APC的配置非常廣泛,所以如果您有權訪問它,我會在後端查看帶有APC的Zend_Cache。如果APC不可用,Zend_Cache在後端的平面文件應該足夠用於中小型網站

0

大多數的php緩存庫是使用output buffer control functions實現的。 你可以用同樣的方法實現你自己的非常簡單的緩存。

<?php 

function callback($buffer) 
{ 
    // Code to store output in cache 
} 

if (/* Test cached copy is still valid */) { 
    /* Output cached copy to browser */ 
    exit(0); 
} 

ob_start("callback"); 
?> 

<html>...</html> 

<?php 
ob_end_flush(); 
?> 

可以省略ob_end_flush(),如果你喜歡,因爲它會在輸出的末尾自動觸發。

有趣的是,這個結構可以包裹在比頁面更小的單元上。例如,你提到緩存只是導航菜單。你會需要更多的邏輯各地塊被緩存,但原理是一樣的。