【第一章】緩存概念

一、緩存概念

緩存 是為了調節(jié)速度不一致的兩個或多個不同物質的速度,在中間對速度較快的一方起到一個加速訪問速度較慢的一方的作用。
比如 CPU 的一級、二級緩存 是保存了 CPU 最近經常訪問的數據;內存 是保存 CPU 經常訪問硬盤的數據;而且硬盤也有大小不一的緩存,甚至是物理服務器的 raid 卡有也緩存,都是為了起到加速 CPU 訪問硬盤數據的目的。
因為 CPU 的速度太快了, CPU 需要的數據硬盤往往不能在短時間內滿足 CPU 的需求,因此 CPU 緩存、內存、 Raid 卡以及硬盤緩存就在一定程度上滿足了 CPU 的數據需求,即 CPU 從緩存讀取數據可以大幅提高 CPU 的工作效率。

計算機緩存

1.1 系統緩存

1.1.1 buffer 與 cache:

buffer:緩沖也叫 \color{blue}{寫緩存},一般用于寫操作,可以將數據先寫入內存再寫入磁盤。buffer 一般用于寫緩沖,用于解決不同介質的速度不一致的緩沖,先將數據臨時寫入到離自己最近的地方,以提高寫入速度。例如 CPU 會把數據先寫到內存的磁盤緩沖區(qū),然后就認為數據已經寫入完成,然后由內核在后續(xù)的時間在寫入磁盤,所以服務器突然斷電會丟失內存中的部分數據。

cache:緩存也叫 \color{blue}{讀緩存},一般用于讀操作。例如 CPU 讀文件從內存讀,如果內存沒有就先從硬盤讀到內存再讀到 CPU,將需要頻繁讀取的數據放在里自己最近的緩存區(qū)域,下次讀取的時候即可快速讀取。

1.1.2 cache 的保存位置:

  • 客戶端:瀏覽器
  • 內存:本地服務器、遠程服務器
  • 硬盤:本機硬盤、遠程服務器硬盤

1.1.3 cache 的特性:

自動過期:給緩存的數據加上有效時間,超出時間后自動過期刪除
過期時間:強制過期,源網站更新圖片后 CDN 是不會更新的,需要強制是圖片緩存過期
命中率:即緩存的讀取命中率

1.2 用戶層緩存

1.2.1 DNS 緩存

默認為 \color{blue}{60 秒},即 60 秒之內在訪問同一個域名就不再進行 DNS 解析

查看 chrome 瀏覽器的 DNS 緩存:chrome://net-internals/#dns

Chrome dns緩存

1.2.2 火狐瀏覽器緩存

Firefox dns緩存

1.2.3 瀏覽器緩存過期機制

1.2.3.1 最后修改時間

系統調用會獲取文件的最后修改時間,如果沒有發(fā)生變化就返回給瀏覽器 \color{blue}{304} 的狀態(tài)碼,表示沒有發(fā)生變化,然后瀏覽器就使用的本地的緩存展示資源。

請求頭的 if-modify 字段
使用瀏覽器緩存
1.2.3.2 Etag 標記

基于 Etag 標記<u>是否一致</u>做判斷<u>頁面是否發(fā)生過變化</u>,比如基于 Nginx 的 etag on 來實現:

Etag 字段
1.2.3.3 過期時間

\color{red}{以上兩種都需要發(fā)送請求},即不管資源是否過期都要發(fā)送請求進行協商,這樣會消耗不必要的時間,因此有了\color{blue}{緩存的過期時間},即第一次請求資源的時候帶一個資源的過期時間,默認為 30 天。當前這種方式使用的比較多,但是\color{red}{無法保證客戶的時間都是準確并且一致的},因此會加入一個\color{blue}{最大生存周期},使用用戶本地的時間計算緩存數據是否超過多少天,下面的過期時間為 2027 年,但是緩存的最大生存周期計算為天等于 3650 天即 10 年,過期時間如下:

過期時間 & 最大生存周期

瀏覽器的緩存過期機制講得更清楚: https://juejin.im/entry/5ad86c16f265da505a77dca4

1.3 CDN 緩存

1.3.1 什么是 CDN

內容分發(fā)網絡( Content Delivery Network),通過將服務內容分發(fā)至全網加速節(jié)點,利用全球調度系統使用戶能夠就近獲取,有效降低訪問延遲,提升服務可用性。

CDN 的好處在于:

  • 第一降低機房的使用帶寬,因為很多資源通過 CDN 就直接返回用戶了。
  • 第二解決不同運營商之間的互聯,因為可以讓聯通的網絡訪問聯通讓電信的網絡訪問電信,起到加速用戶訪問的目的。
  • 第三:解決用戶訪問的地域問題,就近返回用戶資源。

百度 CDN: https://cloud.baidu.com/product/cdn.html
阿里 CDN: https://www.aliyun.com/product/cdn?spm=5176.8269123.416540.50.728y8n
騰訊 CDN: https://www.qcloud.com/product/cdn

1.3.2 用戶請求 CDN 流程

提前對靜態(tài)內容進行預緩存,避免大量的請求回源,導致主站網絡帶寬被打滿而導致數據無法更新,另外 CDN 可以將數據根據訪問的熱度不同而進行不同級別的緩存,例如訪問量最高的資源訪問 CDN 邊緣節(jié)點的內存,其次的放在 SSD 或者 SATA,再其次的放在云存儲,這樣兼顧了速度與成本。

用戶請求 CDN 流程

1.3.3: CDN 主要優(yōu)勢:

提前對靜態(tài)內容進行預緩存,避免大量的請求回源,導致主站網絡帶寬被打滿而導致數據無法更新,另外 CDN 可以將數據根據訪問的熱度不同而進行不同級別的緩存,例如訪問量最高的資源訪問 CD邊緣節(jié)點的內存,其次的放在 SSD 或者 SATA,再其次的放在云存儲,這樣兼顧了速度與成本。緩存到最快的地方如內存,緩存的數據準確命中率高,訪問速度就快。

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

性能優(yōu)化-CDN 專門用于緩存響應速度快

安全相關-抵御攻擊

節(jié)省帶寬:由于用戶請求由邊緣節(jié)點響應,因此大幅降低到源站帶寬

1.4 應用層緩存

Nginx、 PHP 等 web 服務可以設置應用緩存以加速響應用戶請求, 另外有些解釋性語言比如 PHP/Python 不能直接運行,需要先編譯成字節(jié)碼,但字節(jié)碼需要解釋器解釋為機器碼之后才能執(zhí)行,因此字節(jié)碼也是一種緩存,有時候會出現程序代碼上線后字節(jié)碼沒有更新的現象。

1.5 其他層面緩存

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

CPU緩存

磁盤緩存
RAID 卡
分布式緩存: redis、memcache

?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 【轉】緩存在分布式系統中的應用 緩存在分布式系統中的應用 摘要 緩存是分布式系統中的重要組件,主要解決高并發(fā),大數...
    武漢蘇乞兒閱讀 952評論 0 10
  • 原文博客:Doi技術團隊鏈接地址:https://blog.doiduoyi.com初心:記錄優(yōu)秀的Doi技術團隊...
    藍汝丶琪閱讀 832評論 0 1
  • 緩存在分布式系統中的應用 摘要 緩存是分布式系統中的重要組件,主要解決高并發(fā),大數據場景下,熱點數據訪問的性能問題...
    garyond閱讀 1,711評論 0 12
  • 瀏覽器端的緩存規(guī)則 對于瀏覽器端的緩存來講,這些規(guī)則是HTTP協議頭和HTML頁面的Meta標簽中定義的。他們分別...
    niklause_sun閱讀 5,578評論 0 7
  • 高并發(fā)高流量網站架構 Web2.0的興起,掀起了互聯網新一輪的網絡創(chuàng)業(yè)大潮。以用戶為導向的新網站建設概念,細分了網...
    程序o07閱讀 725評論 0 5

友情鏈接更多精彩內容