當前位置:首頁 » 硬碟大全 » 緩存失效怎麼查
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

緩存失效怎麼查

發布時間: 2023-03-27 22:04:56

① 怎麼查看網頁緩存

問題一:如何通過緩存查看過去的網頁 打開網頁工具欄上的「工具」選項――「Internet選項」――「常規」――「瀏覽歷史記錄」――「設置」――「查看文件夾」就會打開一個文件夾的,這裡面有你瀏覽過的一些網頁(包括網上看過的視頻等都會保存在這裡面),前提是你沒有對電腦清理垃圾或清理痕跡!

問題二:怎樣查看電腦的上網網緩存文件怎麼查? 有兩種方法:
1、依次打開c盤――用戶(users)――default――appdate――local――Microsoft――Windows―― Temporary Internet Files。這個文件夾裡面就是視頻緩存的文件,一般來說是「.FLV」為後綴個格式的文件。
2、打開瀏覽器――工具――Internet選項――設置――查看文件。此次顯示的文件路徑,就是視頻緩沖文件所在的地址。

問題三:用電腦看網頁緩存的圖片在哪, 瀏覽網頁上的圖片 你可以在瀏覽器上保存網頁 保存後可以把網頁下載到你的電腦上面 有個文件夾裡面有網頁上的圖片

問題四:網頁緩存在哪裡?? C:\ Documents和Settings \管理員\本地設置\ Temporary Internet Files文件

問題五:網頁緩存文件夾在哪 瀏覽器打開,工具――in供ernet選項――瀏覽歷史記錄設置――查看文件。OK,打開了,找視頻?文件太多,不好找啊,而且有些視頻看完是找不到的,具體為什麼我也不知道!

問題六:如何查看瀏覽過的本地緩存Cookie和網站數據 工具:
瀏覽器
方法如下:
1、打開瀏覽器,點擊右上角【工具】選項,然後點擊【選項】
2、進入」選項「界面,點擊左方菜單欄中【高級設置】
3、在」網頁設置選項下「點擊【網頁內容高級設置】
4、進入Cookie界面,點擊【所有Cookie和網站數據】
5、此時可以看到瀏覽過的網頁,以及網友的Cookie和數據信息
6、如果數據較多,可以在右方的搜索欄輸入要查找的信息,點擊搜索
7、點擊後方的Cookie或本地存儲可以看到具體的網站緩存信息

問題七:看完網頁視頻後緩存在哪裡啊? 網頁下,工具-INTERNET選項,設置里,查看文件夾,

問題八:網頁上看視頻,緩沖的文件在電腦的哪裡可以找到? 右鍵點IE,或者打開IE之後選擇工具,Internet選項,裡面有個常規,中間的地方有個設置,點進去之後有個查看文件,就是這里了,你可以右鍵選擇排列方式,可以選擇按修改日期排列,那拉到最後就是你最近看的視頻緩沖,也可以按大小排列等等

問題九:在看網頁瀏覽網頁時,網頁上的內容保存在電腦上哪裡的? C:\Documents and Settings\Administrator\Local Settings\Temporary Internet Files
在這里 .文件夾隱藏了
打開我的電腦 按 ALT+T
點文件夾選項-查看-隱藏受保護的系統文件
顯示所有文件和文件夾
裡面的東西可以全部刪除,影響電腦速度,裡面還可能有病毒。

問題十:在網頁上看的視屏一般的緩沖是保存在哪裡的呀?? C:\Documents and Settings\Administrator\Local Settings,裡面都是緩存文件。
要現在文件夾選項勾掉隱藏保護文件弧然後搞個管理員破解工具拿到許可權才能進去的。

② mysql緩存機制怎麼查看有沒有啟動

我們都知道 MySQL 的 Table Cache 是表定義的緩存,江湖上流傳著各種對這個參數的調優方法。
table cache 的作用,就是節約讀取表結構文件的開銷。對於table cache 是否命中,其實table cache 是針對於線程的,每個線程有自己的緩存,只緩存本線程的表結構定義。不過我們發現,strace 中沒有關於表結構文件的 open 操作(只有 stat 操作,定位表結構文件是否存在),也就是說 table cache 不命中,不一定需要讀取表結構文件。這種感覺好像是:在不命中 table cache 時,命中了另外一個表結構緩存。
運維建議:
我們讀一下 MySQL 的文檔,關於 table_open_cache 的建議值公式:建議值 = 最大並發數 * join 語句涉及的表的最大個數。
通過實驗我們容易理解:table_cache 是針對於線程的,所以需要最大並發數個緩存。另外,一個語句 join 涉及的表,需要同時在緩存中存在。所以最小的緩存大小,等於語句 join 涉及的表的最大個數。將這兩個數相乘,就得到了 MySQL 的建議值公式。

③ 應對Memcached緩存失效,導致高並發查詢DB的幾種思路

1.定期從DB里查詢數據,再刷到memcached里
這種方法有個缺點是,有些業務的key可能是變化的,不確定的。
而且不好界定哪些數據是應該查詢出來放到緩存中的,難以區分冷熱數據。

2.當緩存取到為null時,加鎖去查詢DB,只允許一個線程去查詢DB
這種方式不太靠譜,不多討論。而且如果是多個web伺服器的話,還是有可能有並發的操作。

3.在向memcached寫入value時,同時寫入當前機器在時間作為過期時間
當get得到數據時,如果當前時間 - 過期時間 > 5s,則後台啟動一個任務去查詢DB,更新緩存。
當然,這里的後台任務必須保證同一個key,只有一個線程在執行查詢DB的任務,不然這個還是高並發查詢DB。
缺點是要把過期時間和value合在一起序列化,取出數據後,還要反序列化。很不方便。

網上大部分文章提到的都是前面兩種方式,有少數文章提到第3種方式。下面提出一種基於兩個key的方法:
4.兩個key,一個key用來存放數據,另一個用來標記失效時間
比如key是aaa,設置失效時間為30s,則另一個key為expire_aaa,失效時間為25s。
在取數據時,用multiget,同時取出aaa和expire_aaa,如果expire_aaa的value == null,則後台啟動一個任務去查詢DB,更新緩存。和上面類似。

對於後台啟動一個任務去查詢DB,更新緩存,要保證一個key只有一個線程在執行,這個如何實現?
對於同一個進程,簡單加鎖即可。拿到鎖的就去更新DB,沒拿到鎖的直接返回。

對於集群式的部署的,如何實現只允許一個任務執行?
這里就要用到memcached的add命令了。
add命令是如果不存在key,則設置成功,返回true,如果已存在key,則不存儲,返回false。
當get expired_aaa是null時,則add expired_aaa 過期時間由自己靈活處理。比如設置為3秒。
如果成功了,再去查詢DB,查到數據後,再set expired_aaa為25秒。set aaa 為30秒。
綜上所述,來梳理下流程:
比如一個key是aaa,失效時間是30s。查詢DB在1s內。

put數據時,設置aaa過期時間30s,設置expire_aaa過期時間25s;
get數據時,multiget aaa 和 expire_aaa,如果expired_aaa對應的value != null,則直接返回aaa對應的數據給用戶。如果expire_aaa返回value == null,則後台啟動一個任務,嘗試add expire_aaa,並設置超時過間為3s。這里設置為3s是為了防止後台任務失敗或者阻塞,如果這個任務執行失敗,那麼3秒後,如果有另外的用戶訪問,那麼可以再次嘗試查詢DB。如果add執行成功,則查詢DB,再更新aaa的緩存,並設置expire_aaa的超時時間為25s。
5. 時間存到Value里,再結合add命令來保證只有一個線程去刷新數據
update:2014-06-29
最近重新思考了下這個問題。發現第4種兩個key的辦法比較耗memcached的內存,因為key數翻倍了。結合第3種方式,重新設計了下,思路如下:

仍然使用兩個key的方案:

key
__load_{key}
其中,__load_{key} 這個key相當於一個鎖,只允許add成功的線程去更新數據,而這個key的超時時間是比較短的,不會一直佔用memcached的內存。

在set 到Memcached的value中,加上一個時間,(time, value),time是memcached上的key未來會過期的時間,並不是當前系統時間。
當get到數據時,檢查時間是否快要超時: time - now < 5 * 1000,假定設置了快要超時的時間是5秒。

* 如果是,則後台啟動一個新的線程:
* 嘗試 add __load_{key},
* 如果成功,則去載入新的數據,並set到memcached中。
* 原來的線程直接返回value給調用者。

④ 微信文件沒下載顯示過期怎麼找回

微信上的文件只要查看過就會緩存到手機中,可以通過以下方法找到微信中的文件:

1、打開手機,找到手機中的「文件管理」。

微信(WeChat) 是騰訊公司於2011年1月21日推出的一個為智能終沖高端提供即時通訊服務的免費應用程序,由張鎮判殲小龍所帶領的騰訊廣州研發中心產品團隊御沖打造 。

微信支持跨通信運營商、跨操作系統平台通過網路快速發送免費(需消耗少量網路流量)語音簡訊、視頻、圖片和文字,同時,也可以使用通過共享流媒體內容的資料和基於位置的社交插件「搖一搖」、「朋友圈」、」公眾平台「、」語音記事本「等服務插件。

⑤ 如何查看硬碟緩存

工具/原料:Windows7系統電腦,電腦管家軟體。

1、雙擊電腦桌面中的電腦管家。

⑥ 查詢數據放入了redis中緩存,怎麼查看緩存的數據

普通分頁
一般分頁做緩存都是直接查找出來,按頁放到緩存里,但是這種緩存方式有很多缺點。
如緩存不能及時更新,一旦數據有變化,所有的之前的分頁緩存都失效了。
比如像微博這樣的場景,微博下面現在有一個頂次數的排序。這個用傳統的分頁方式很難應對。
一種思路
最近想到了另一種思路。
數據以ID為key緩存到Redis里;
把數據ID和排序打分存到Redis的skip list,即zset里;
當查找數據時,先從Redis里的skip list取出對應的分頁數據,得到ID列表。
用multi get從redis上一次性把ID列表裡的所有數據都取出來。如果有缺少某些ID的數據,再從資料庫里查找,再一塊返回給用戶,並把查出來的數據按ID緩存到Redis里。
在最後一步,可以有一些小技巧:
比如在缺少一些ID數據的情況下,先直接返回給用戶,然後前端再用ajax請求缺少的ID的數據,再動態刷新。

⑦ 會員緩存失敗

出現緩存失敗的情況有以下幾種可能:
1、網路斷開,導致緩存失敗,請檢查網路是否正常。
2、視頻本身有問題,導致緩存失敗。
3、有些視頻因為版權原因,本身就是無法緩存的。
緩存文件寫入失敗解決方法
「滑鼠雙擊此電腦,右鍵單擊本地磁碟,選擇屬性,彈出窗口,切換到工具選項欄,點擊檢查,選擇掃描驅動器,待掃描完成即可,若還是不能解決的話,在屬性窗口,切換到硬體選項欄,選中磁碟驅動器,點擊屬性,切換到卷選項欄,選擇寫入,再切換到策略選項欄,取消啟用設備上的寫入緩存前面的勾,點擊確定即可。」

緩存文件寫入失敗會在計算機系統中出現的問題
CPU高速緩存是用於減少處理器訪問內存所需平均時間的部件。在金字塔式存儲體系中它位於自頂向下的第二層,僅次於CPU寄存器。其容量遠小於內存,但速度卻可以接近處理器的頻率。

當處理器發出內存訪問請求時,會先查看緩存內是否有請求數據。如果存在(命中),則不經訪問內存直接返回該數據;如果不存在(失效),則要先把內存中的相應數據載入緩存,再將其返回處理器。緩存之所以有效,主要是因為程序運行時對內存的訪問呈現局部性特徵。這種局部性既包括空間局部性,也包括時間局部性。有效利用這種局部性,緩存可以達到極高的命中率。

緩存寫入失敗是什麼原因引起的?
一、非正常電腦關引起的:
如果是非正常關電腦引起的寫入緩存失敗,那就在【運行】中輸入【CHKDSK 盤符】。
系統錯誤:
1、打開我的電腦,打開本地磁碟屬性,在彈出的對話框中選擇【工具】--【開始檢查】,
2、在檢查磁碟對話框中。把下面的兩項打上勾,檢查一下。就可以了,如果不能解決就往下面看。
3、打開【本地磁碟】屬性對話框,找到【硬體】
4、打開【策略】對話框,把【啟用磁碟上的寫入緩存】前面的勾去了。
二、硬碟出現壞道引起的:
1、這種情況如果硬碟壞道多了,最好的辦法是直接換硬碟。如果壞道不是很多,電腦上也沒有什麼重要數據,那就可以先用工具處理一下接著用。但這樣的方法保證不了硬碟能用多長時間。
2、先進入MHDD測試一下硬碟情況。
3、測試出了硬碟出現問題的地方,然後進入PE啟用【分區工具DISKGENIUS】。
4、通過剛才測試出來的結果,算出壞道出現的容量。用分區工具把有壞道的部分,單獨分出來不用。把好的分出來接著用,但是這樣出來重要的數據就不要放在這個硬碟上了。

⑧ MySQL緩存

mysql 開啟查詢緩存可以有兩種方法來開啟一種是使用set命令來進行開啟,另一種是直接修改my.ini文件來直接設置都是非常的簡單的哦。

開啟緩存,設置緩存大小,具體實施如下:

windows下是my.ini,linux下是my.cnf;

在配置文件的最後追加上:

需要重啟mysql生效;

b) 開啟緩存,兩種方式:

a)使用mysql命令:

如果報錯:

Query cache is disabled; restart the server with query_cache_type=1 to enable it,還是老老實實的該配置文件,然後重啟吧,原因如下:

查看是否設置成功

show variables like "%query_cache%" 查看是否設置成功:

當然如果你的數據表有更新怎麼辦,沒關系mysql默認會和這個表有關系的緩存刪掉,下次查詢的時候會直接讀表然後再緩存

下面是一個簡單的例子:

以上的相關內容就是對mysql緩存查詢和設置的介紹,望你能有所收獲。

一般,我們會把 query_cache_type 設置為 ON,默認情況下應該是ON

query_cache_type有3個值 0代表關閉查詢緩存OFF,1代表開啟ON,2(DEMAND)代表當sql語句中有SQL_CACHE關鍵詞時才緩存,如:

這樣 當我們執行 select id,name from tableName; 這樣就會用到查詢緩存。

①在 query_cache_type 打開的情況下,如果你不想使用緩存,需要指明
select sql_no_cache id,name from tableName;
②當sql中用到mysql函數,也不會緩存

當然也可以禁用查詢緩存: mysql> set session query_cache_type=off;

上面的顯示,表示設置查詢緩存是可用的。

表示查詢緩存大小,也就是分配內存大小給查詢緩存,如果你分配大小為0,
那麼 第一步 和 第二步 起不到作用,還是沒有任何效果。

上面是 mysql6.0設置默認的,之前的版本好像默認是0的,那麼就要自己設置下。

設置

這里是設置1M左右,900多K。

再次查看下:

顯示我們設置新的大小,表示設置成功。

例如: 如果查詢結果很大, 也緩存????這個明顯是不可能的。
MySql 可以設置一個最大的緩存值,當你查詢緩存數結果數據超過這個值就不會
進行緩存。預設為1M,也就是超過了1M查詢結果就不會緩存。

這個是默認的數值,如果需要修改,就像設置緩存大小一樣設置,使用set

重新指定大小。
好了,通過4個步驟就可以 打開了查詢緩存,具體值的大小和查詢的方式 這個因不同
的情況來指定了。
mysql查詢緩存相關變數

MySQL 提供了一系列的 Global Status 來記錄 Query Cache 的當前狀態,具體如下:

Qcache_free_blocks:目前還處於空閑狀態的 Query Cache 中內存 Block 數目
Qcache_free_memory:目前還處於空閑狀態的 Query Cache 內存總量
Qcache_hits:Query Cache 命中次數
Qcache_inserts:向 Query Cache 中插入新的 Query Cache 的次數,也就是沒有命中的次數
Qcache_lowmem_prunes:當 Query Cache 內存容量不夠,需要從中刪除老的 Query Cache 以給新的 Cache 對象使用的次數
Qcache_not_cached:沒有被 Cache 的 SQL 數,包括無法被 Cache 的 SQL 以及由於 query_cache_type 設置的不會被 Cache 的 SQL
Qcache_queries_in_cache:目前在 Query Cache 中的 SQL 數量
Qcache_total_blocks:Query Cache 中總的 Block 數量

檢查是否從查詢緩存中受益的最簡單的辦法就是檢查緩存命中率
當伺服器收到SELECT 語句的時候,Qcache_hits 和Com_select 這兩個變數會根據查詢緩存
的情況進行遞增
查詢緩存命中率的計算公式是:Qcache_hits/(Qcache_hits + Com_select)。

query_cache_min_res_unit的配置是一柄」雙刃劍」,默認是4KB,設置值大對大數據查詢有好處,但如果你的查詢都是小數據 查詢,就容易造成內存碎片和浪費。

查詢緩存碎片率 = Qcache_free_blocks / Qcache_total_blocks * 100%

如果查詢緩存碎片率超過20%,可以用FLUSH QUERY CACHE整理緩存碎片,或者試試減小query_cache_min_res_unit,如果你的查詢都是小數據量的話。

查詢緩存利用率 = (query_cache_size - Qcache_free_memory) / query_cache_size * 100%

查詢緩存利用率在25%以下的話說明query_cache_size設置的過大,可適當減小;查詢緩存利用率在80%以上而且 Qcache_lowmem_prunes > 50的話說明query_cache_size可能有點小,要不就是碎片太多。

查詢緩存命中率 = (Qcache_hits - Qcache_inserts) / Qcache_hits * 100%

示例伺服器 查詢緩存碎片率 = 20.46%,查詢緩存利用率 = 62.26%,查詢緩存命中率 = 1.94%,命中率很差,可能寫操作比較頻繁吧,而且可能有些碎片。

查詢緩存可以看做是SQL文本和查詢結果的映射。如果第二次查詢的SQL和第一次查詢的SQL完全相同(注意必須是完全相同,即使多一個空格或者大小寫不同都認為不同)且開啟了查詢緩存,那麼第二次查詢就直接從查詢緩存中取結果,可以通過下面的SQL來查看緩存命中次數(是個累加值):

另外即使完全相同的SQL,如果使用不同的字元集、不同的協議等也會被認為是不同的查詢而分別進行緩存。

在表的結構或數據發生改變時,查詢緩存中的數據不再有效。有這些INSERT、UPDATE、 DELETE、TRUNCATE、ALTER TABLE、DROP TABLE或DROP DATABASE會導致緩存數據失效。所以查詢緩存適合有大量相同查詢的應用,不適合有大量數據更新的應用。

可以使用下面三個SQL來清理查詢緩存:

1、FLUSH QUERY CACHE; // 清理查詢緩存內存碎片。

2、RESET QUERY CACHE; // 從查詢緩存中移出所有查詢。

3、FLUSH TABLES; //關閉所有打開的表,同時該操作將會清空查詢緩存中的內容。

Query Cache是MySQL Server層的一個非常好的特性,對於小數據集或訪問量非常集中的應用場景,有非常好的性能提升,但是Query Cache引入了一些新的問題,而且大部分場景下比較雞肋,官方打算棄用了

參考:
https://www.cnblogs.com/wangzhuxing/p/5223881.html
https://www.cnblogs.com/lixiuran/archive/2014/03/08/3588654.html

⑨ 為什麼b站的視頻緩存不了了

b站視頻不能緩存可能是版權受限。

b站是如今目前市面上較為火爆的視頻彈幕互動交流網址,許多年青人都喜愛在上面看視頻,但是有時要想緩存視頻便於隨時隨地收看卻發覺不可以緩存。

這是由於b站上的一些著作是有版權的,在版權受到限制的狀況下只容許在線播放而不可以開展緩存,以防下載後大張旗鼓散播,也是維護版權的一種方式。

若是不用版權的視頻也不可以緩存,大多數是由於b站升級以後客戶沒有尋找緩存部位的原因,最先大家開啟b站,隨意點擊一個不用版權的視頻,進來以後點擊右上角的三個點,在下面彈出窗口的頁面中點擊「緩存」,挑選好畫面質量後點擊要緩存的視頻就能下載取得成功。

視頻緩存的注意事項:

有時候如果網站並發訪問高,一個緩存如果失效,可能出現多個進程同時查詢DB,同時設置緩存的情況,如果並發確實很大,這也可能造成DB壓力過大,還有緩存頻繁更新的問題。

我現在的想法是再APP中對緩存查詢加鎖,如果KEY不存在,就加鎖,然後查DB入緩存,然後解鎖;其他進程如果發現有鎖就等待,然後等解鎖後返回數據或者進入DB查詢。

⑩ 瀏覽器緩存機制

有dns的地方,就有緩存。瀏覽器、操作系統、Local DNS、根域名伺服器,它們都會對DNS結果做一定程度的緩存。

DNS查詢過程如下:

首先搜索瀏覽器自身的DNS緩存,如果存在,則域名解析到此完成。
如果瀏覽器自身的緩存裡面沒有找到對應的條目,那麼會嘗試讀取操作系統的hosts文件看是否存在對應的映射關系,如果存在,則域名解析到此完成。
如果本地hosts文件不存在映射關系,則查找本地DNS伺服器(ISP伺服器,或者自己手動設置的DNS伺服器),如果存在,域名到此解析完成。
如果本地DNS伺服器還沒找到的話,它就會向根伺服器發出請求,進行遞歸查詢。

瀏覽器本地緩存失效後,瀏覽器會向CDN邊緣節點發起請求。類似瀏覽器緩存,CDN邊緣節點也存在著一套緩存機制。CDN邊緣節點緩存策略因服務商不同而不同,但一般都會遵循http標准協議,通過http響應頭中的
Cache-control: max-age 的欄位來設置CDN邊緣節點數據緩存時間。

當瀏覽器向CDN節點請求數據時,CDN節點會判斷緩存數據是否過期,若緩存數據並沒有過期,則直接將緩存數據返回給客戶端;否則,CDN節點就會向伺服器發出回源請求,從伺服器拉取最新數據,更新本地緩存,並將最新數據返回給客戶端。 CDN服務商一般會提供基於文件後綴、目錄多個維度來指定CDN緩存時間,為用戶提供更精細化的緩存管理。

CDN 優勢
CDN節點解決了跨運營商和跨地域訪問的問題,訪問延時大大降低。
大部分請求在CDN邊緣節點完成,CDN起到了分流作用,減輕了源伺服器的負載。

http請求報文(request)
請求行
請求方法  空格  URL 空格  協議版本 回車符 換行符
請求頭(通用信息頭、請求頭、實體頭)
頭部欄位名 冒號  值  回車鍵 換行符
...
頭部欄位名 冒號  值  回車鍵 換行符
空行
回車符   換行符
實體主體(只有post請求有)
主體

http響應報文(response)
狀態行
協議版本  空格  狀態碼 空格  狀態碼描述 回車符 換行符
響應頭部
頭部欄位名 冒號  值   回車符 換行符
...
頭部欄位名 冒號  值   回車符 換行符
空行
回車符   換行符
響應正文
正文

瀏覽器初次向伺服器發起請求後拿到請求結果,會根據響應報文中HTTP頭的緩存標識,決定是否緩存返回的結果,是則將請求結果和緩存標識存入瀏覽器緩存中

瀏覽器每次發起請求,都會現在瀏覽器緩存中查找該請求的結果以及緩存標識
瀏覽器                瀏覽器緩存        伺服器

——————第一次發起http請求——————>

<——沒有該請求的緩存結果和緩存標識————

——————————————發起http請求——————————————>

<——————————返回該請求結果和緩存規則————————————

——將請求結果和緩存標識存入瀏覽器緩存——>

強制緩存就是向瀏覽器緩存查找結果,並根據該結果的緩存規則來決定是否使用該緩存結果的過程

強制緩存的情況分為三種:
1、不存在該緩存結果和緩存標識,強制緩存失效,直接向伺服器發起請求
2、存在該緩存結果和緩存標識,但結果已經失效,強制緩存失效,使用協商緩存
3、存在該緩存結果和緩存標識,且該結果沒有失效,強制緩存生效,直接返回該結果

控制強制緩存的欄位:Expires,Cache-Control

Expires 是 HTTP/1.0 控制緩存的欄位,值為伺服器返回該請求的結果緩存時間
即再次發送請求是,客戶端時間 小於 Expires的值,直接使用緩存結果

Cache-Control 是HTTP/1.1的規則,主要用於控制網頁緩存,主要取值為:
public:所有的內容都緩存(客戶端和代理伺服器都可以緩存)
private:所有內容只有客戶端可以緩存(默認值)
no-cache:客戶端緩存內容,但是是否使用緩存則需要經過協商緩存來驗證決定
no-store:即不使用強制緩存,也不使用協商緩存
max-age=xxx:緩存內容將在xxx秒後失效

Expires 是一個絕對值
Cache-Control 中 max-age 是相對值,解決了 Expires時期 服務端與客戶端 可能出現時間差的問題

註:Expires和Cache-Control同時存在時,只有Cache-Control生效

協商緩存就是強制緩存失效後,瀏覽器攜帶緩存標識向伺服器發起請求,由伺服器根據緩存標識決定是否使用緩存的過程

協商緩存的兩種情況:
1、協商緩存生效,返回304,繼續使用緩存
過程:
瀏覽器                 瀏覽器緩存     伺服器

————————發起http請求————————>

<——該請求的緩存結果失效,只返回緩存標識——

————————攜帶該資源的緩存標識,發起http請求————————>

<—————————————304,該資源無更新————————————

——————獲取該請求的緩存結果——————>

<——————返回該請求的緩存結果——————

2、協商緩存失敗,返回200和請求結果
過程:
瀏覽器                 瀏覽器緩存     伺服器

————————發起http請求————————>

<——該請求的緩存結果失效,只返回緩存標識——

————————攜帶該資源的緩存標識,發起http請求————————>

<————————200,資源已更新,重新返回請求和結果———————

——將該請求結果和緩存標識存入瀏覽器緩存中—>

協商緩存的標識也是在響應報文的HTTP頭中和請求結果一起返回給瀏覽器的

控制協商緩存的欄位:
(1) Last-Modified/If-Modified-Since:Last-Modified是伺服器響應請求是,返回該資源文件在伺服器最後被修改的時間;If-Modified-Since再次發起請求時,攜帶上次返回的Last-Modified的值,伺服器將該欄位值與該資源最後修改時間對比,決定是否用緩存
(2)Etag/If-None-Match:Etag伺服器響應請求時,返回當前資源文件的一個唯一標識,由伺服器生成之;If-None-Match是再次發起請求時,攜帶上次返回的唯一標識Etag的值,伺服器收到後,將該欄位值與該資源在伺服器上的Etag對比,一致 則返回304,否則返回200

註:Etag/If-None-Match優先順序高於Last-Modified/If-Modified-Since,同時存在時只有Etag/If-None-Match生效

瀏覽器緩存分為:內存緩存 和 硬碟緩存

內存緩存特性:
(1)快速讀取:內存緩存會將編譯解析後的文件,存入該進程的內存中,便於下次運行時快速讀取
(2)時效性:一旦關閉進程,進程內存清空

硬碟緩存特性:
永久性:直接寫入硬碟文件中
復雜、緩慢:讀取緩存對該緩存存放的硬碟文件進行I/O操作,重新解析

from memory cache:使用內存中的緩存

from disk cache:使用硬碟中的緩存

瀏覽器讀取順序:memory ——> disk

瀏覽器將js和圖片等文件解析執行後直接存入內存緩存中,F5刷新頁面時,from memory cache(使用內存中的緩存)
css文件存入硬碟中,F5刷新頁面時,from disk cache(使用硬碟中的緩存)

參考文章
https://segmentfault.com/a/1190000017962411
https://www.cnblogs.com/chengxs/p/10396066.html