電腦把最常用的文件從存儲(chǔ)器里提出來(lái)臨時(shí)放在緩存里以加快運(yùn)行。因?yàn)榫彺嫱褂玫氖莚am,電腦里大的緩存就是內(nèi)存條了,最快的是cpu上鑲的l1和l2緩存,顯卡的顯存是給gpu用的緩存,硬盤(pán)上也有16m或者32m的緩存。千萬(wàn)不能把緩存理解成一個(gè)東西,它是一種處理方式的統(tǒng)稱(chēng)!
頁(yè)面緩存用于服務(wù)器上的靜態(tài)和動(dòng)態(tài)對(duì)象的請(qǐng)求。請(qǐng)求失敗叫做緩存未命中,原因可能是緩存滿了,也可能是緩存未滿,但請(qǐng)求的頻率較低或最近重啟過(guò)。未命中緩存的請(qǐng)求會(huì)被直接傳遞給服務(wù)器,并且用該請(qǐng)求回答并填充頁(yè)面緩存,從而替換緩存中最近很少使用的數(shù)據(jù)。
頁(yè)面緩存:每次訪問(wèn)頁(yè)面的時(shí)候,都會(huì)先檢測(cè)相應(yīng)的緩存頁(yè)面文件是否存在,如果不存在,就連接數(shù)據(jù)庫(kù),得到數(shù)據(jù),顯示頁(yè)面并同時(shí)生成緩存頁(yè)面文件,這樣下次訪問(wèn)的時(shí)候頁(yè)面文件就發(fā)揮作用了
網(wǎng)站中頁(yè)面緩存的應(yīng)用場(chǎng)景:
1、對(duì)耗時(shí)的查詢(xún)進(jìn)行緩存,例如產(chǎn)品列表頁(yè)的查詢(xún)。
2、可以緩存整個(gè)頁(yè)面的html,提高訪問(wèn)響應(yīng)能力;
3、針對(duì)局部頁(yè)面元素進(jìn)行緩存;
4、和上下文相關(guān)的用戶數(shù)據(jù),例如用戶從訂單埴寫(xiě)頁(yè)進(jìn)入到訂單成功頁(yè),或者是從產(chǎn)品列表頁(yè)點(diǎn)擊詳細(xì)產(chǎn)品進(jìn)行預(yù)訂時(shí)的訂單填寫(xiě)頁(yè),此時(shí)這兩個(gè)頁(yè)面之間都需要傳遞大量的相關(guān)數(shù)值,我們可以把所有的數(shù)值封裝在一個(gè)類(lèi)中,然后通過(guò)頁(yè)面緩存進(jìn)行通信。
5、對(duì)復(fù)雜數(shù)據(jù)的結(jié)果進(jìn)行緩存,例如一個(gè)查詢(xún)需要結(jié)合多個(gè)數(shù)據(jù)集,然后根據(jù)這些數(shù)據(jù)集進(jìn)行相應(yīng)的運(yùn)算,即使每個(gè)子集查詢(xún)有緩存,但還是需要額外的運(yùn)算,這種情況可以考慮頁(yè)面緩存計(jì)算后的結(jié)果
一、在web服務(wù)器處理請(qǐng)求前實(shí)現(xiàn)頁(yè)面緩存
在web服務(wù)器處理請(qǐng)求前實(shí)現(xiàn)頁(yè)面緩存,這樣建站系統(tǒng)就會(huì)得到很大的可擴(kuò)展性。生成動(dòng)態(tài)內(nèi)容的web服務(wù)器工作量會(huì)大大減少,因?yàn)橛?jì)算過(guò)的結(jié)果在此之前的時(shí)間已被緩存了。提供靜態(tài)內(nèi)容的web服務(wù)器不需要查詢(xún)的內(nèi)容,可以少用一些緩存空間。因此,對(duì)于靜態(tài)網(wǎng)站來(lái)說(shuō),緩存的作用就不那么明顯了,因?yàn)檩敵鰞?nèi)容本身就沒(méi)有太大的計(jì)算量和負(fù)擔(dān)。
二、要實(shí)現(xiàn)頁(yè)面緩存必須使用正確的http頭,確保對(duì)內(nèi)容和查詢(xún)結(jié)果進(jìn)行大化的緩存,并且網(wǎng)站建設(shè)時(shí)避免通過(guò)meta標(biāo)簽刷新頁(yè)面。
三、盡可能加入rfc2616標(biāo)準(zhǔn)中的另一個(gè)http響應(yīng)頭參數(shù),從而大化內(nèi)容的可緩存性。
這個(gè)新的參數(shù)是etag,也就是實(shí)體標(biāo)簽,目的是配合if-none-match有條件地從服務(wù)器獲得請(qǐng)求。etag是由服務(wù)器端的資源改變了,那么服務(wù)器會(huì)為它分配一個(gè)新的etag。假設(shè)能被瀏覽器正確地支持,對(duì)象和它的etag標(biāo)簽就會(huì)被瀏覽器緩存,之后瀏覽器向web服務(wù)器發(fā)送的if-none-match請(qǐng)求都會(huì)包含該標(biāo)簽。如果標(biāo)簽匹配,服務(wù)器會(huì)用http 304 not modified進(jìn)行響應(yīng)。如果該標(biāo)簽與服務(wù)器上的不一致,服務(wù)器會(huì)發(fā)送更新過(guò)的對(duì)象以及與之相關(guān)的etag。
在大多數(shù)建站系統(tǒng)中etag是可選的,但如果要確保在任何特定的頁(yè)面或?qū)ο蟮恼麄€(gè)網(wǎng)絡(luò)傳輸中,頁(yè)面緩存和代理緩存具有更大的可緩存性,強(qiáng)烈推薦使用etag。最后再次建議所有
成都網(wǎng)站建設(shè)人員都重視頁(yè)面緩存,利用好緩存將節(jié)省大量的硬件投入成本。
影響頁(yè)面緩存命中率的因素。
1:數(shù)據(jù)時(shí)實(shí)性,每個(gè)業(yè)務(wù)系統(tǒng)都對(duì)自己的數(shù)據(jù)有相應(yīng)的要求,有些數(shù)據(jù)的實(shí)時(shí)性非常強(qiáng),像每日的股票信息,這種情況如果設(shè)置了緩存,緩存的命中率會(huì)特別低。
2:緩存粒度問(wèn)題,一般來(lái)說(shuō)是頁(yè)面緩存的跨度太大,即此時(shí)的key值包含的條件太多,會(huì)出現(xiàn)緩存命中率特別低的情況。
四、提高頁(yè)面緩存命中率的方法:
1:增大存儲(chǔ)介質(zhì)的容量;
2:對(duì)非常熱點(diǎn)的數(shù)據(jù)進(jìn)行捕捉,可以采用實(shí)時(shí)更新緩存的方式來(lái)平衡緩存與實(shí)時(shí)性的問(wèn)題,例如可以單獨(dú)開(kāi)啟一個(gè)后臺(tái)服務(wù)來(lái)定時(shí)做更新緩存的工作。
3:調(diào)整緩存key值的算法,盡量保證緩存key的細(xì)粒度,key-value就是很好的細(xì)粒度例子。
4:根據(jù)業(yè)務(wù)調(diào)整頁(yè)面緩存的過(guò)期策略。
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源:
創(chuàng)新互聯(lián)