關於快取1

2021-09-26 02:36:25 字數 2164 閱讀 3579

1.想寫關於快取的起因

最近在做de乙個企業的官網,之前做手機端網頁,p2p**時都出現過修改頁面,手機電腦重新整理沒有效果。

2.什麼是瀏覽器快取

3.怎樣判斷請求是從伺服器獲取還是使用快取

開啟f12開發者工具network,再次重新整理頁面看網路請求,size一列對應的是from cache則是從快取中讀取的。

4.為什麼要使用快取

1.減少網路頻寬消耗,當使用快取時,網路流量很小,降低運營成本;(頻寬需要進一步理解)

2.降低伺服器壓力,使用本地快取,減少網路請求從而減輕伺服器壓力。

3.減少網路延遲,使用快取加快頁面開啟速度,優化體驗;

5.瀏覽器快取機制

1.使用html的meta標籤 

作用是告訴瀏覽器不快取,每次訪問都需要去伺服器拉取。

這種快取的缺點: 僅有ie才能識別這段meta標籤含義,其它主流瀏覽器僅識別「cache-control: no-store」的meta標籤。在ie中識別到該meta標籤含義,並不一定會在請求字段加上pragma,但的確會讓當前頁面每次都發新請求。

2.使用快取有關的http訊息報頭

在http請求和響應的訊息報頭中,常見的與快取有關的訊息報頭有:

a:

expires: mon, 15 aug 2016 03:56:47 gmt  啟用快取和定義快取時間。告訴瀏覽器資源快取過期時間,如果還沒過該時間點則不發請求;

cache-control:no-cache  告訴瀏覽器忽略資源的快取副本,強制每次請求直接傳送給伺服器,拉取資源,但不是「不快取」;

cache-control與expires的作用一致,都是指明當前資源的有效期,控制瀏覽器是否直接從瀏覽器緩訪問資料還是重新發請求到伺服器取資料。只不過cache-control的選擇更多,設定更細緻,如果同時設定的話,其優先順序高於expires

b:

last-modified:告訴瀏覽器這個資源最後的修改時間。伺服器將資源傳遞給客戶端時,會將資源最後更改的時間以「last-modified: gmt」的形式加在實體首部上一起返回給客戶端;

etag:告訴瀏覽器當前資源在伺服器的唯一識別符號(生成規則由伺服器決定);

配置last-modified/etag的情況下,瀏覽器再次訪問統一uri的資源,還是會傳送請求到伺服器詢問檔案是否已經修改,如果沒有,伺服器會只傳送乙個304回給瀏覽器,告訴瀏覽器直接從自己本地的緩訪問資料;如果修改過那就整個資料重新發給瀏覽器;

比較:

cache-control/expires則不同,如果檢測到本地的快取還是有效的時間範圍內,瀏覽器直接使用本地副本,不會傳送任何請求。兩者一起使用時,cache-control/expires的優先順序要高於last-modified/etag。即當本地副本根據cache-control/expires發現還              在有效期內時,則不會再次傳送請求去伺服器詢問修改時間(last-modified)或實體標識(etag)了。

6.http網路請求過程

第一次請求:

再次請求:

7.解決頁面讀取快取的辦法:

時間戳,版本號

8.使用者行為對快取的影響

f5:重新整理頁面,有可能還是從快取中獲取的資料;

crtl+f5:跳過快取,從伺服器重新獲取資料;

關於快取擊穿 快取雪崩 快取穿透

設計乙個快取系統,不得不要考慮的問題就是 快取穿透 快取擊穿與失效時的雪崩效應。快取穿透是指查詢乙個在db中根本不存在的key,由於快取一般是不命中時被動寫入的,如果從儲存層查不到資料是不寫入快取,這將導致這個不存在的資料請求每次都要請求到儲存層,失去了快取的意義,流量大的時候,可能會導致db宕機。...

有關於快取

我們使用快取的目的主要有如下幾點 1 減少資料庫查詢次數,降低資料庫負載。2 縮短php執行路徑,降低web前端負載。3 減少webserver的請求數量,降低web前端負載。第一項 比較接近底層,主要做細粒度資料快取,比如快取乙個資料物件,一行記錄等。只有當物件中的屬性或記錄中的字段值發生變化後使...

關於Redis快取

業務場景 實時性要求不高的查詢 如果用redis做mysql的快取,key value中的值為乙個屬性 屬性值組成的hashmap,鍵的定義是個難點。鍵應該盡可能與mysql查詢的條件相關,請求呼叫的方法 controller裡分發 對應的查詢引數就可以唯一的確定查詢條件,如如 listusers....