簡體   English   中英

處理緩存動態數據

[英]Handling caching dynamic data

我正在使用一種稱為Quickcache的PHP,它可以提供網頁的全頁緩存。 它運作良好,但我唯一的問題是我擁有一個動態網站,並且某些功能在打開緩存時無法更新我想要它們的方式。

例如,如果用戶登錄,即使該用戶已登錄到服務器,登錄框仍然會出現(我可以轉到該站點的未緩存部分,它將顯示用戶的登錄狀態非常好)。 更改用戶設置等也是如此。

我也不能每次用戶登錄或更改微小設置時都轉儲高速緩存,這會太過分了。

似乎我無法緩存,因為它使網站無法使用,並且我不緩存網站在任何明顯的負載下都將無法使用。

我應該如何解決這個問題? 一般而言,我對緩存還很陌生-我是第一次將我的一個站點投入生產。 當然其他人已經解決了這個問題。

我不是php人,但我可以告訴您有關緩存的信息。

為每個用戶生成內容的動態站點最難有效地完成工作,但是可以做到這一點。 它將要求您查看數據在應用程序中的流動方式,以確定如何緩存,緩存在何處以及緩存什么。 以下是一些准則:

  • 每個用戶或每個頁面都不會更改的數據-緩存在應用程序內存中並獲取它,而不是轉到DB。
  • 每個用戶但每個頁面都不會更改的數據-用戶會話中的緩存
  • 每個頁面但每個用戶都不會更改的數據-使用頁面名稱作為鍵在應用程序內存中緩存
  • 每位用戶每頁更改的數據-以頁面名稱為鍵的會話緩存
  • 每個頁面請求唯一的數據-不緩存。

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

抱歉,很高興重新發布舊帖子,但是在閱讀本文后,我認為OP問題仍然非常重要。

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

您需要做的是:

A.監視內容使用情況以標識經常保留(但不緩存)的動態對象。 請注意,識別絕對 (100%)不變的對象將有助於避免與個性化相關的問題,因此,您需要確保使用的是交叉驗證,堅如磐石的方法...(例如,檢查大小,減小到字節)

B.一旦找到了良好的“潛在候選者”,請通過覆蓋/創建新的HTTP緩存指令來使其可訪問。

C.繼續監視內容使用情況,不時(經常)重新加載新版本並將其與當前緩存的對象進行比較,以使其保持最新狀態。

這是要點。 在此處可以找到類似的“學習”緩存機制的描述: 動態緩存

內部人員使用類似的學習啟發法來緩存動態內容,並以5分鍾的刷新率獲取新鮮度。

GL。

您很幸運,馬上就可以訪問您的網站,不是嗎?

不確定此特定工具“ Quickcache”的工作方式,但是從概念上講,您需要做一個頂層PHP文件,其中包含可緩存部分的包含,以便您從緩存的副本和包含每次加載動態內容的頂級文檔。 我相信Smarty可以讓您使用模板來做到這一點。 對於簡單的情況(有些情況不是那么簡單),我通常編寫自己的代碼。

然后僅在需要時清除包含文件上的緩存,可能是cron每天執行一次,或者是在管理更新中更改了代碼中的值而觸發了代碼。

您使用的圖書館的文檔很差,我找不到任何好的東西。

但是我建議使用例如Zend_Cache lib(如果您使用此框架)來制作自己的緩存系統。 您將決定要緩存什么以及如何緩存,因此基本上就可以達到最佳效果。

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

這是我建議的最佳方法,因為您不想緩存某些動態操作(路線)。 您可以簡單地將它們排除在要創建的緩存系統之外。 我對復雜的查詢做了類似的事情,但是您可以緩存所有內容。 在頁面上更改內容后,您可以刷新緩存。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM