作者簡介
李先生(Lemon),高級運維工程師(自稱),SRE專家(目標),夢想在35歲買一輛保時捷。喜歡鑽研底層技術,認為底層基礎才是王道。一切新技術都離不開操作系統(CPU、內存、磁盤)、網絡等。堅持輸入輸出,記錄自己學習的點滴,在平凡中堅持前行,總有一天會遇見不一樣的自己。公眾號:運維汪(ID:Leeeee_Li)。

一、緩存的優點
1、減少冗余數據傳輸
當很多客戶端訪問一個服務器時,服務器會多次傳輸一份文檔每次傳送給一個客戶端。一些相同的字節會在網絡中一遍遍的傳輸,這些冗余的數據傳輸會耗盡網絡帶寬,降低傳輸速度,加種Web服務器的負載。有了緩存,就可以保留第一條服務器響應的副本,后續請求就可以由緩存的副本來響應。
2、緩解網絡瓶頸
緩存可以緩解網絡的瓶頸。很多網絡為本地網絡客戶端提供的帶寬比遠程服務器提供的帶寬要寬。客戶端會以路徑上最慢的網速訪問服務器。如果客戶端從一個快速局域網的緩存中得到了一個副本,那么緩存就可以提高性能,尤其在傳輸的文件比較大時。
3、瞬間擁塞
緩存在破壞瞬間擁塞時起到重要的作用。
4、距離時延
當帶寬不成問題的情況下,每台路由器會增加因特網流量的時延。
二、緩存命中
1、緩存命中
已有的副本為某些到達緩存的請求提供服務,稱為緩存命中(cache hit)

2、緩存未命中
一些到達緩存的請求可能會由於沒有副本可用,而被轉發到原始服務器,稱為緩存未命中(cache miss)

3、HTTP再驗證
原始服務器的內容可能會發生變化,緩存要對其進行檢測,看他們保存的副本是否仍然是服務器上最新的副本,這種新鮮度檢測被稱為HTTP再驗證。
3.1、再驗證命中
緩存對緩存的副本進行再驗證時,會向原始服務器發送一個小的再認證請求。如果內容沒有變化,服務器返回304 Not Modified。這種認證稱為再驗證命中(revalidate hit)或緩慢命中(slow hit)

3.2、再驗證未命中
如果服務器對象已與緩存副本不同,服務器返回200 OK

3.3 對象被刪除
如果服務器對象已經被刪除了,服務器就返回404 Not Found響應,緩存也會將其副本刪除。
4、緩存命中率
緩存提供服務的請求所占的比例稱為緩存命中率(cache hit rate),也稱文檔命中率(document hit rate)。
5、字節命中率
字節命中率表示的是緩存提供的字節在傳輸的所有字節中所占的比例。
三、緩存的處理步驟

1、接收--緩存從網絡中接收抵達的請求報文。
2、解析--緩存對報文進行解析,提取出URL和各種首部。
3、查詢--緩存查看是否有本地副本可用,如果沒有,就去服務器獲取一份並保存在本地。
4、新鮮度檢查--緩存查看已緩存的副本是否新鮮,如果不是,就詢問服務器是否有任何更新。
5、創建響應--緩存用新的首部和已緩存的主體來構建一條響應報文。
6、發送--緩存通過網絡將響應發回給客戶端。
7、日志--緩存可選的創建一個日志文件條目來描述這個事務。

四、標記
1、過期響應首部
Cache-Control: max-stale 緩存可以隨意提供過期的文件 Cache-Control: max-stale=<s> 在<s>秒時間內,文檔就不能過期 Cache-Control: min-fresh=<s> 至少在為了<s>秒內文檔要保持新鮮 Cache-Control: max-age 資源能夠被緩存(保持新鮮)的最大時間,max-age是距離請求發起的時間的秒數 Cache-Control:no-cache 每次由請求發出時,緩存會將此請求發送到服務器進行再認證,如果沒有過期,緩存才使用本地的緩存副本返回 Cache-Control:no-store 緩存中不得存儲任何關於客戶端和服務端響應的內容,每次由客戶端發起的請求都會下載完整的響應內容 Expires 指定一個絕對的過期日期,如果過期日期已經過了,就說明文檔不再新鮮了。如Wed, 06 Jan 2021 09:35:39 GMT

在緩存文檔過期前,緩存可以任意頻率使用這些副本,無需與服務器聯系(特殊情況除外)。一旦已緩存文檔過期,緩存就必須與服務器進行核對,詢問文檔是否被修改過,如果被修改過,就要獲取一份新的(帶有新的過期日期)的副本。
2、條件方法再驗證
If-Modified-Since: <date> 如果從指定日期之后文檔被修改過了,就執行請求的方法。可以與Last-Modifed服務器響應首部配合使用,只有在內容被修改后與已緩存版本有所不同的時候采取獲取內容。
If-None-Match:<tags> 服務器可以為文檔提供特殊的標簽(ETag),而不是將其與最近修改的日期相匹配。這些標簽就像序列號一樣。如果已緩存標簽與服務器文檔中的標簽不一樣。If-None-Match首部就會執行所請求的方法。
五、學習交流
歡迎大家關注我的公眾號,一起交流、學習。