頁面輸出緩存的原理
系統處理客戶端的請求時,先看看有沒有相應的頁面輸出緩存,如果有緩存且沒有過期,就直接讀取緩存并返回頁面 HTML 代碼給客戶端;如果沒有緩存,或緩存已經過期,則執行完整的頁面解析過程,返回頁面 HTML 代碼給客戶端,并將頁面 HTML 代碼保存到緩存中,這樣下次再處理同樣的請求時就直接從緩存讀取并返回給客戶端了。
這一原理和數據緩存非常類似。事實上,我們可以將頁面輸出緩存理解成一種特殊的數據緩存。
頁面輸出緩存和數據緩存的主要區別
- 數據格式差異
- 頁面輸出緩存,緩存的是整個解析后的頁面 HTML 代碼;而數據緩存,一般緩存的是頁面中要調用的各個對象(比如各種 參數配置、所有站點信息、所有節點信息、所有權限數據等)。
- 存儲位置差異
- 在我們系統中,頁面輸出緩存是以緩存文件方式保存在硬盤中的,類似于生成 HTML 功能的 HTML 文件;數據緩存一般是保存在內存中的,或者使用分布式緩存系統來保存。
- 數據量差異
- 頁面輸出緩存的數量非常非常多,假如我們有50萬篇文章、10萬個節點列表及分頁,要為 PC/手機/PAD 三種設備緩存,則會有超過(50+10)X3=180萬個頁面輸出緩存文件;而數據緩存的數量一般在幾百個即可,相對于頁面輸出緩存來說,少得多。
功能特性
- 緩存策略
-
支持針對不同頁面配置不同的緩存策略和緩存失效策略。
- 攻擊防護
-
系統針對緩存穿透、緩存雪崩、緩存擊穿等情況都做了防范。
系統能夠防護各種潛在的緩存攻擊行為,如窮舉訪問不存在的頁面等。
- 手工清理緩存
-
支持手動清理站點首頁緩存、所有節點緩存、所有內容緩存、全站頁面緩存以及未發布內容的頁面緩存。
支持在站點管理、節點管理、內容采編發中分別清理指定的站點、節點、內容的頁面輸出緩存。
- 自動按需清理緩存
-
在執行添加、修改、刪除、審核通過、取消審核、發布、取消發布、移動等操作時,系統會自動清理對應頁面的緩存文件,包括內容頁、列表頁和站點首頁等。
當在節點A的模板中調用了跨上下級關系的節點 B 的內容時,系統會自動識別并維護節點間的關聯關系。因此,在節點 B 進行添加、審核、發布等操作時,不僅會自動清理節點B的頁面緩存,還會同步清理節點 A 的頁面緩存,避免因遺漏清理導致節點 A 的列表頁面無法及時更新。
當模板文件發生改變時自動清理調用了此模板的相關頁面的頁面輸出緩存。
- 主動更新頁面輸出緩存
-
在清理緩存的時,系統會創建更新緩存的任務及其詳細信息。讓另外部署的緩存更新工具來訪問后臺服務器,從而及時將相應的頁面創建好頁面輸出緩存,這樣就與生成 HTML 的機制類似,從而極大提高整個系統的負載能力。此外,系統支持生成任務的優先級控制,以便在不同應用場景中靈活處理 HTML 生成的優先次序。系統還支持對任務及其詳細信息進行排重處理,以減少對服務器資源的無效消耗。
- 數據庫共享緩存
-
在多服務器負載均衡的部署環境中,各服務器可以通過數據庫共享緩存數據。一旦其中一臺服務器生成了緩存,其余服務器能夠直接從數據庫中獲取共享的緩存,并將其轉化為本地文件緩存,從而避免重新執行完整的頁面解析過程。這種方法大大提高了整個系統的負載能力。
- 多服務器同步清理
-
在分布式部署環境中,支持通過消息隊列讓所有服務器同步清理頁面輸出緩存。
- 查看清理任務
-
支持在后臺查看更新緩存任務及任務進度。
用戶登錄
還沒有賬號?
立即注冊