網路請求緩存
A. Okhttp解析(五)緩存的處理
大家好,之前我們講解了Okhttp網路數據請求相關的內容,這一節我們講講數據緩存的處理。本節按以下內容講解Okhttp緩存相關的內容。
緩存的使用場景很多,通過它可以將數據通過一定的規則存儲起來,再次請求數據的時候就可以快速從緩存中讀取了,緩存有以下優勢。
HTTP本身提供了一套緩存相關的機制。這套機制定義了相關的欄位和規則,用來客戶端和服務端進行緩存相關的協商,如響應的數據是否需要緩存,緩存有效期,緩存是否有效,伺服器端給出指示,而客戶端則根據服務端的指示做具體的緩存更新和讀取緩存工作。http緩存可以分為兩類:
強制緩存,在緩存數據未失效的情況下,可以直接使用緩存數據,有兩個欄位Expires和Cache-Control用於標明失效規則。
表示過期時間,由服務端返回。那麼下次請求數據時,判斷這個Expires過期時間是否已經過了,如果還沒有到過期時間,則使用緩存,如果過了過期時間,則重新請求伺服器的數據。Expires格式如下:
不過因為伺服器和客戶端的時間並不是同步的,用一個絕對時間作為過期的標記並不是很明智,所以HTTP1.1之後更多的是Cache-Control,它的控制更加靈活。
表示緩存的控制,有服務端返回。它有以下幾個取值:
默認情況下是private,也就是不能共享的。Cache-Control格式如下:
對比緩存,表示需要和服務端進行相關信息的對比,由伺服器決定是使用緩存還是最新內容,如果伺服器判定使用緩存,返回響應嗎304,判定使用最新內容,則返回響應碼200和最新數據。對比緩存的判定欄位有兩組:
ETag表示資源的一種標識信息,用於標識某個資源,由服務端返回,優先順序更高。格式如下:
然後客戶端再次請求時,加入欄位If-None-Match,格式如下:
服務端收到請求的該欄位時(之前的Etag值),和資源的唯一標識進行對比,如果相同,說明沒有改動,則返回狀態碼304,如果不同,說明資源被改過了,則返回狀態碼200和整個內容數據。
Last-Modified表示資源的最近修改時間,由服務端返回,優先順序更低。格式如下:
Last-Modified
由伺服器返回,表示響應的數據最近修改的時間。
If-Modified-Since
由客戶端請求,表示詢問伺服器這個時間是不是上次修改的時間。如果服務端該資源的修改時間小於等於If-Modified-Since指定的時間,說明資源沒有改動,返回響應狀態碼304,可以使用緩存。如果服務端該資源的修改時間大於If-Modified-Since指定的時間,說明資源又有改動了,則返回響應狀態碼200和最新數據給客戶端,客戶端使用響應返回的最新數據。
Last-Modified欄位的值(服務端返回的資源上次修改時間),常常被用於客戶端下次請求時的If-Modified-Since欄位中。
HTTP的緩存規則是優先考慮強制緩存,然後考慮對比緩存。
Okhttp緩存相關的類有如下:
要開啟使用Okhttp的緩存其實很簡單,只需要給OkHttpClient對象設置一個Cache對象即可,創建一個Cache時指定緩存保存的目錄和緩存最大的大小即可。
那麼下面我們來看看Okhttp緩存執行的大概流程
Okhttp的緩存流程分為讀取緩存和存儲緩存兩個過程,我們分別分析。
讀取使用緩存的流程從HttpEngine的sendRequest發送請求開始。
接下來我們分析
從Cache的get方法開始。它按以下步驟進行。
如果存在緩存的話,在指定的緩存目錄中,會有兩個文件「****.0」和「****.1」,分別存儲某個請求緩存的響應頭和響應體信息。(「****」是url的md5加密值)對應的ENTRY_METADATA響應頭和ENTRY_BODY響應體。緩存的讀取其實是由DiskLruCache來讀取的,DiskLruCache是支持Lru(最近最少訪問)規則的用於磁碟存儲的類,對應LruCache內存存儲。它在存儲的內容超過指定值之後,就會根據最近最少訪問的規則,把最近最少訪問的數據移除,以達到總大小不超過限制的目的。
接下來我們分析CacheStrategy緩存策略是怎麼判定的。
直接看CacheStrategy的get方法。緩存策略是由請求和緩存響應共同決定的。
接來下我們看看CacheControl類里有些什麼。
可以發現,它就是用於描述響應的緩存控制信息。
然後我們再看看Okhttp存儲緩存是怎麼進行的。
存儲緩存的流程從HttpEngine的readResponse發送請求開始的。
可以看到這里先通過maybeCache寫入了響應頭信息,再通過cacheWritingResponse寫入了響應體信息。我們再進去看Cache的put方法實現。
我們繼續看Cache的writeTo方法,可以看到是寫入一些響應頭信息。
到這里Okhttp緩存的讀取和存儲流程我們就清楚了。可以說,緩存的使用策略基本都是按照HTTP的緩存定義來實現的,所以對HTTP緩存相關欄位的理解是很重要的。然後關於DiskLruCache是如何管理緩存文件的,這個其實也很好理解,首先的原則就是按照LRU這種最近最少使用刪除的原則,當總的大小超過限定大小後,刪除最近最少使用的緩存文件,它的LRU演算法是使用LinkedHashMap進行維護的,這樣來保證,保留的緩存文件都是更常使用的。具體實現大家可以分析DiskLruCache和LinkedHashMap的實現原理。
B. web緩存器如何減少被請求的對象的時延的
把用戶參數請求入隊列,然後直接返回用戶調用,後續消費者慢慢處理請求就好了,不過這樣子只能返回調用是否成功,並不能立即返回業務處理結果。
Web緩存(或HTTP緩存)是用於臨時存儲(緩存)Web文檔(如HTML頁面和圖像),以減少伺服器延遲的一種信息技術。Web緩存系統會保存下通過這套系統的文檔的副本;如果滿足某些條件,則可以由緩存滿足後續請求。 Web緩存系統既可以指設備,也可以指計算機程序。
前向位置系統
前向緩存是Web伺服器網路外部的緩存,例如在客戶電腦、ISP或公司網路上。網路感知前向緩存就像一個前向緩存,但只緩存大量訪問的項目。客戶端(如網頁瀏覽器)也可以存儲網路內容以供重用。例如,如果按下後退按鈕,則可以顯示本地緩存版本的頁面,而不是發送到Web伺服器的新請求。位於客戶端和伺服器之間的Web代理可以通過評估HTTP頭來選擇是否存儲網頁內容。
C. 瀏覽器清理緩存怎麼清理
瀏覽器清理緩存清理方法如下:
工具:戴爾7591、Windows10。
1、打開瀏覽器,點擊右上角的三個點,然後選擇設置按鈕。
瀏覽器緩存簡介:
瀏覽器緩存是為了節約網路的資源加速瀏覽,瀏覽器在用戶磁碟上對最近請求過的文檔進行存儲,當訪問者再次請求這個頁面時,瀏覽器就可以從本地磁碟顯示文檔,這樣就可以加速頁面的閱覽。
瀏覽器緩存主要有兩類:緩存協商:Last-modified,Etag和徹底緩存:cache-control,Expires。緩存的方式節約了網路的資源,提高了網路的效率。
D. 什麼叫網路緩存級別
問題一:網路緩存級別高好還是低好 這個看你的具體需求
如果你是經常光顧同一家網站,那麼設置緩存級別比較高的話有助於提高你的頁面打開速度。
如果你平時上網沒有什麼固定目標的話是沒有什麼必要設置高級別的緩存的。芹罩
另外就是在斷網情況下,你的緩存高的話是可以繼續登陸你以前登陸過的網頁的。只不過無法打開新的網頁罷了。
問題二:先鋒影音的網路緩存級別是什麼意思 多這樣
問題三:網路緩存級別高好還是低好 一般來說,嫌銷鬧越大越好CPU的二級緩存,但有些不給CPU二級緩存敏感。
CPU第一高速緩存找到有用的數據,如找到,然後找到緩存。早期的緩存
水平在CPU內外部高速緩存之外完成,二級緩存。高速緩存,數據緩存也指出亞洲和指令緩存。兩者都可以通過CPU訪問,減少了爭用Cache
導致沖突。一般還內置了跟蹤緩存。在CPU的緩存有兩個,二手讀取80%的緩存命中率。換句話說,有用
CPU高速緩存中的數據中發現,佔80%的總數據量的,而其餘的20%?從二級高速緩存中讀取。因為它是不是真的准確
預測數據將被執行,讀取二級緩存的命中率為80%左右(從二級緩存中讀取
總數據的有用數據的16%)現在是二級緩存的CPU BR>也做在裡面,並沒有12緩存之間頗有區別。無論是原發性或繼發性緩存緩存容量的增加,必然導致量增加
CPU內部難免晶體管技術的限制數量。加電壓對CPU二級緩存的命中率
敏感性不高。所以
CPU的二級緩存是不是越大越好是看二級緩存CPU的靈敏度。緩存緩存緩存是一個關鍵的決定
CPU的性能。為什麼CPU - 高低頻能量就會出現在哪裡?技術還不成熟早的Core 2 Duo處理器。英特爾
增加了CPU的頻率有兩個CPU的緩存使得晶體管的數量有更多的線被拉長。通過工藝
技術的限制比在同級別的AMD CPU性能要低得多。雖然AMD的頻率比
降低與二級緩存的Intel CPU,但更大的緩存比Intel
問題四:緩存級別是啥意思? 由於CPU的運算速度愈來愈快,主存儲器(DRAM)的數據存取速度常無法跟上CPU的速度,因而影響計算機的執行效率,如果在CPU與主存儲器之間,使用速度最快之SRAM來作為CPU的數據快取區,將可大幅提升系統的執行效率,而且透過Cache來事先讀取CPU可能需要的數據,可避免主存儲器與速度更慢的輔助內存的頻繁存取數據,對系統的執行效率也大有幫助。
不過因SRAM比DRAM貴太多,如果主存儲器全採用SRAM則系統造價太高,所以一般皆只安裝512KB~1MB的Cache。Cache的應用除了加在CPU與主存儲器之間外,硬碟、列印機、CD-ROM等斗耐外圍設備也都會加上Cache來提升該設備的數據存取效率。
3.用於 DNS 和 WINS,用於遠程主機的最近已解析名稱的資源記錄的本地信息存儲。通常,高速緩存在計算機查詢和解析名稱被動態地創建。它也有助於優化解析被查詢名稱所需的時間。
4.將最近使用過的數據值臨時存儲於內存中的某個特殊池中以便於以後更快地進行訪問的過程。對於 DNS,一般指 DNS 查詢解析過程中 DNS 伺服器存儲得自 DNS 名稱空間的信息的能力。(例如,DNS 伺服器可以高速緩存從其他 DNS 伺服器收到的 DNS 記錄。) 也可以在 DNS 客戶服務中使用高速緩存,將其作為 DNS 客戶端保存在最近的查詢過程中得到的信息高速緩存的方法。
問題五:影音先鋒播放器網路緩存級別怎麼設置 影音先鋒怎麼用? 1 怎麼搜索影音先鋒電影資源 網路搜索: 電影名+影音先鋒 電影名\演員關鍵字+xfplay xfplay在線 資源查找:xfplay:/ /這是影音先鋒在線資源 BT種子,視頻資源等等 2 當然是搜索電影資源,搜索方法很多種。採納!
問題六:蘋果手機影音先鋒網路緩存級別高好還是低好? 這個無所謂的!主要是因為你的刻錄機的緩存可能比較小,所以要頻繁的從硬碟讀到緩存,再從緩存讀出刻錄到光碟!
如果你的刻錄速度選擇低一些,應該就不會這樣頻繁的讀取緩存了!
不過真的沒有什麼大的影響。
問題七:2級別緩存是什麼意思? FROTHRONE/TP 哥們兒,理解不要錯誤,緩存大才說明CPU的處理能力強,你說反了!~2級緩存是存放預處理指令的!~他是內部直接調用,不會存在瓶頸問題,所以是電腦所有件當中最快的單元,可以說緩存越大,機器就越快!~但如果說性能,還要看總體!~現在緩存都是2*1M。。。很快的!~
問題八:下面關於緩存級別和配置的描述哪些是正確的 影音先鋒用 一 搜索影音先鋒電影資源 網路搜索: 電影名+影音先鋒 電影名\演員關鍵字+xfplay xfplay線 資源查找:xfplay:/ /影音先鋒線資源 BT種視頻資源等等 二 搜索電影資源搜索種采
問題九:cpu幾級緩存是什麼意思!詳細點謝謝 緩存是中央處理器中的一個寄存數據與指令的器件。目前緩沖級段分3級。級數小速度越快,而這個你可以把它理解為容池。因為數據在各個器件中的速度是不同的,而這個容池的專用就是緩沖的專用、、而台灣等地,就叫緩沖。。過大差距的頻率速度的數據是不能很好正常琺作的。所以出現了一級緩沖,二級緩沖,三級緩沖。進行預存和整合作用
問題十:三級緩存是什麼意思 緩存大小也是CPU的重要指標之一,而且緩存的結構和大小對CPU速度的影響非常大,CPU內緩存的運行頻率極高,一般是和處理器同頻運作,工作效率遠遠大於系統內存和硬碟。
L1Cache(一級緩存)是CPU第一層高速緩存,分為數據緩存和指令緩存。
L2Cache(二級緩存)是CPU的第二層高速緩存,分內部和外部兩種晶元。
L3Cache(三級緩存),分為兩種,早期的是外置,內存延遲,同時提升大數據量計算時處理器的性能。降低內存延遲和提升大數據量計算能力對游戲都很有幫助。而在伺服器領域增加L3緩存在性能方面仍然有顯著的提升。比方具有較大L3緩存的配置利用物理內存會更有效,故它比較慢的磁碟I/O子系統可以處理更多的數據請求。具有較大L3緩存的處理器提供更有效的文件系統緩存行為及較短消息和處理器隊列長度。