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