緩存

緩存概念:

緩存是爲了調節速度不一致的兩個或多個不一樣的物質的速度,在中間對速度較快的一方起到一個加速訪問速度較慢的一方的做用,好比CPU的一級、二級緩存是保存了CPU最近常常訪問的數據,內存是保存CPU常常訪問硬盤的數據,並且硬盤也有大小不一的緩存,設置是物理服務器的raid卡也有緩存,都是爲了起到加速CPU訪問硬盤數據的目的,由於CPU的速度太快了,CPU須要的數據硬盤每每不能在短期內知足CPU的需求,所以CPU緩存、內存、Raid卡以及硬盤緩存就在必定程度上知足CPU的數據需求,即CPU從緩存讀取數據能夠大幅提升CPU的工做效率。php

系統緩存
buffer與cache:

buffer:緩衝也叫寫緩衝,通常用於寫操做,能夠將數據先寫入內存在寫入磁盤,buffer通常用於寫緩衝,用於解決不一樣介質的速度不一致的緩衝,先將數據臨時寫入到離本身最近的地方,以提升寫入速度,CPU會把數據先寫到內存的磁盤緩衝區,而後就認爲數據已經寫入完成,而後由內核在後續的時間在寫入磁盤,因此服務器忽然斷電會丟失內存中的部分數據。python

cache:緩存也叫讀緩存,通常用於讀操做,CPU讀取文件從內存讀,若是內存沒有就先從硬盤讀到內存在讀到CPU,將須要頻繁讀取的數據放在離本身最近的緩存區域,下次讀取的時候便可快速讀取。nginx

cache的保存位置:

客戶端:瀏覽器web

內存:本地服務器、遠程服務器redis

硬盤:本機硬盤、遠程服務硬盤chrome

cache的特性:

自動過時:給緩存的數據加上有效時間,超出時間後自動過時刪除瀏覽器

過時時間:強制過時,源網站更新圖片後CDN是不會更新的,須要強制是圖片緩存過時緩存

命中率:即緩存的命中率安全

用戶層緩存
DNS緩存:

默認爲60秒,即60秒以內在訪問同一域名就不在進行DNS解析:性能優化

查看chrome瀏覽器的DNS緩存:

chrome://net-internals/#dns

瀏覽器緩存過時機制:

最後修改時間:

系統調用會獲取文件的最後修改時間,若是沒有發生變化就返回給瀏覽器304的狀態碼,表示沒有發生變化,而後瀏覽器就是用的本地的緩存展現資源,

Etag標記:

基於Etag標記是否一致作判斷頁面是否發生變化,好比基於nginx的etag on來實現。

過時時間:

以上兩種都須要發送請求,即無論資源是否過時都要發送請求進行協商,這樣會消耗沒必要要的時間,所以有了緩存的過時時間,即第一次請求資源的時候帶一個資源的過時時間,默認爲30天,當前這種方式使用的比較多,可是沒法保證客戶的時間都是準確而且一致的,所以假如一個最大生存週期,使用用戶本地的時間計算緩存數據是否超過多少天

CDN緩存
什麼是CDN:

內容分發網絡,經過將服務內容分發至全國加速節點,利用全球調度系統使用戶可以就近獲取,有效下降訪問延遲,提高服務可用性,CDN第一下降機房的使用帶寬,由於不少資源經過CDN就直接返回用戶了,第二解決不一樣運營商之間的互聯,由於可讓聯通的網絡訪問電信,電信的訪問聯通,起到加速用戶訪問的目的,第三:解決用戶訪問的地域問題,就近返回用戶資源。

用戶請求CDN流程:

提早對靜態內容進行預緩存,避免大量的請求回源,致使主站網絡帶寬被打滿而致使數據沒法更新,另外CDN能夠將數據根據訪問的熱度不一樣而進行不一樣級別的緩存,例如訪問量最高的資源訪問CDN邊緣節點的內存,其次的放在SSD或者SATA,再其次的放在雲存儲,這樣兼顧了速度與成本。

 

CDN主要優點

提早對靜態內容進行預緩存,避免大量的請求回源,致使主站網絡帶寬被打滿而致使數據沒法更新,另外CDN能夠將數據根據訪問的熱度不一樣而進行不一樣級別的緩存,例如訪問量最高的資源訪問CDN邊緣節點的內存,其次的放在SSD或者SATA,再其次的放在雲存儲,這樣兼顧了速度與成本。緩存-緩存到最快的地方如內存,緩存的數據準確命中率高,訪問速度就快

調度準確-將用戶調度到最近的邊緣節點

性能優化-CDN 專門用於緩存響應速度快

安全相關-抵禦攻擊

節省帶寬:因爲用戶請求邊緣節點響應,所以大幅下降到源站帶寬

應用緩存

nginx、php等web服務能夠設置應用緩存以加速響應用戶請求,另外有些解釋型語言好比php/python不能直接運行,須要先編譯成字節碼,但字節碼須要解釋器解釋爲機器碼以後才能執行,所以字節碼也是一種緩存,有時候會出現程序代碼上線後字節碼沒有更新的現象。

其餘層面緩存

CPU緩存(L1的數據緩存和L1的指令緩存)、二級緩存、三級緩存

磁盤緩存

RAID卡

分佈式緩存:redis、memcache

相關文章
相關標籤/搜索