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