2011-04-14 63 views
2

我正在使用一種名爲Quickcache for PHP,它提供了對網頁的整頁緩存。它工作的很好,但我唯一的問題是,我有一個動態網站,並且某些事情不會更新我打開緩存時所需的方式。處理緩存動態數據

例如,如果用戶登錄,登錄框仍然會出現,即使對於用戶登錄的服務器(我可以訪問未緩存的站點部分,它會顯示用戶登錄非常好)。

我也無法每次用戶登錄或更改一個微小的設置時轉儲緩存,這將是矯枉過正。

看起來我無法緩存,因爲它使網站無法使用,我不緩存該網站在任何可觀的負載下都將無法使用。

我應該如何解決這個問題?我對通常的緩存很陌生 - 我第一次推出我的一個生產站點。當然其他人已經解決了這個問題。

回答

6

我不是一個PHP的人,但我可以告訴你有關緩存。

爲每個用戶生成內容的動態網站是最有效的操作,但它可以完成。它將要求您查看應用程序中數據的流向,以確定如何緩存,在何處緩存以及要緩存什麼內容。下面是一些指導原則:

  • 數據不按用戶或頁面更改 - 緩存的應用程序內存和 搶它,而不是去到DB。
  • 數據每用戶改變,但不 每頁 - 在用戶會話緩存
  • 數據每頁改變,但每個用戶不 - 使用 頁面名稱作爲鍵
  • 數據緩存在應用程序內存每個用戶每頁更改 - 緩存會話的頁面名稱爲 密鑰
  • 每頁請求唯一的數據 - 不緩存。

不僅來自數據庫的數據是緩存的候選人。如果您有一塊處理數據的複雜邏輯,請考慮緩存該邏輯的輸出。

0

你會很幸運能有這麼多的流量到您的網站馬上,不是嗎?

不知道這個特定的工具「Quickcache」是如何工作的,但從概念上講,您想要做的是擁有一個包含可緩存部分的頂級PHP文件,以便從中加載半靜態部分緩存副本和包含每個負載上的動態內容的頂級文檔。 Smarty允許你用我相信的模板來做到這一點。對於簡單的情況(有些不那麼簡單),我通常編寫自己的代碼。

然後根據需要清除包含文件上的緩存,每天通過cron或者通過管理更新在代碼中觸發,這會更改那裏的值。

0

您使用的圖書館文檔較差,我找不到任何好的內容。

但我會建議使用例如Zend_Cache lib(如果您使用此框架)製作自己的緩存系統。您將決定緩存什麼以及如何緩存,這基本上可以達到最佳效果。

加載頁面後,您將檢查緩存中的頁面,如果存在,請使用它。

這是我可以建議的最好方法,因爲您不想緩存一些動態操作(路由)。你可以簡單地將它們從你將要製作的緩存系統中排除出去。我用複雜的查詢做類似的事情,但是你可以緩存一切。在你改變頁面之後,你可以刷新緩存。

0

對不起恢復舊帖子,但在閱讀本文後,我覺得OP問題仍然非常相關。

從我所收集的信息來看,您在這裏遇到的問題是個性化和新鮮度問題,這是處理動態網站時非常常見的問題。

你需要做的是:

A.顯示器內容的使用,以確定被不斷地重新提供服務(而不是緩存),動態對象。請注意,確定絕對是(100%)未改變的對象將有助於避免個性化相關的問題,因此您需要確保您使用交叉驗證,堅如磐石的方法...(即檢查大小,直到字節)

B.一旦找到好的「潛在候選人」,通過覆蓋/創建用於緩存的新HTTP指令使其成爲可緩存。 C.繼續監測內容使用情況,不時重新加載新版本(經常),並將其與當前緩存對象進行比較,以保持新鮮。

這是它的要義。可以在這裏找到類似「學習」緩存機制的描述:Dynamic Caching

一個裏面使用了類似的學習試探法來緩存動態內容和5分鐘的刷新率。 GLP。

GL。