⑴ 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的實現原理。
⑵ 伺服器上C盤滿了,如何清除緩存的解決辦法
1、運用磁碟清理軟體清理C盤,大約可為C盤釋放50M-800M空間。
2、關閉休眠功能,在開始菜單的運行里輸入powercfg -h off 指令,關閉休眠,此文件實際大小和物理內存是一樣的,大約可以為C盤釋放1-3G的空間。
3、設置虛擬內存: 計算機屬性>高級系統設置>設置(性能)>高級選項卡>更改(虛擬內存),將C盤設置為無分頁文件,然後把D盤設置成系統管理的大小即可,更改後只有按「設置」按鈕才能生效,最後重啟便完成了設置,此文件默認為物理內存的1.5倍,大約可為C盤釋放2-4G的空間。
4、刪除自動備份文件,運行cmd程序(在「開始–>程序–>附件」中),滑鼠右鍵選擇「以管理員身份運行」;然後,命令行輸入rd/S/Q c:WINDOWS.OLD,提示確認是否刪除目標文件夾,輸入y然後回車即可。WINDOWS.OLD為系統的備份文件,時間越久就越大,超過10G都是很正常的。大約可為C盤釋放3G以上空間。
5、在電腦管家主界面上點擊「清理垃圾」,確認相關垃圾類型被勾選後,點擊「開始掃描」,然後點擊「立即清理」,如果有需要確認才能清理的垃圾,會您確認後再進行深度清理,以實現快速、安全地清理掉電腦中的垃圾文件。
⑶ linux伺服器如何清緩存
更新了的, 只是客戶端沒有更新
這個很好解決
⑷ 怎樣 清除伺服器緩存
登陸伺服器,重新啟動應用服務(如IIS、TomCat或JBOSS等)。
⑸ web伺服器緩存基本定義
為了能夠給用戶一個良好的上網體驗,大部分的網頁和瀏覽器都配置了預載入以及緩存功能。今天昆明電腦培訓http://www.kmbdqn.cn/就通過案例分析來了解一下,關於web緩存的基本定義與類型介紹。
Web緩存是什麼?為什麼要使用緩存?
Web緩存處於伺服器(也稱為源伺服器)和客戶端之間,監視請求並保存響應的副本,比如HTML頁面,圖片和文件等(統稱為表述)。如果之後有對同一個URL的新請求,它會使用自己保存的內容來響應,而不是再次請求源伺服器來獲取內容。
使用Web緩存主要有下面兩個原因:
減少延遲——因為響應請求的內容來自緩存(距客戶端較近)而不是源伺服器,它會花較少的時間來獲得表述並將他們呈現出來。這使得Web看起來具有良好的響應速度。
減少網路傳輸——由於復用了表述,它可以減少客戶端使用的帶寬總量。如果客戶需要為流量付費,這就意味著省錢。緩存會降低對帶寬的要求,也降低處理難度。
Web緩存的種類
瀏覽器緩存
你在查看現代Web瀏覽器(比如IE、Safari或Mazilla)選項的時候,可能會看到「緩存」設置。這個選項讓你配置一部分硬碟空間來保存你看過的表述。瀏覽器緩存的規則相當簡單。它通常會在一次會話(即當前瀏覽器中一次調用)中檢查表述是否新。
這個緩存在用戶使用「回退」按鈕或者點擊一個瀏覽過的鏈接時會特別有用。而且,如果你在網站的各個頁面中瀏覽相同的圖片,他們幾乎能馬上從緩存中載入出來。
代理緩存
Web代理緩存的工作原理相同,但規模更大。代理以同樣的方式為成百上千的用戶服務;大公司和ISP常常把代碼緩存建立在防火牆之上,也可能是以獨立設備的形式存在(也稱為中間設備)。
代理緩存即不是客戶端的一部分,也不是伺服器的一部分,而是在網路之外,必須以某種方式把請求路由過去。其中一種方式是手工修改瀏覽器代理設備,指定要使用的代碼;另一種方式是攔截。攔截式代理會根據其自身的基礎網路重定向Web請求,不需要在客戶端配置,客戶端甚至不知道它們的存在。
代理緩存是一種共享緩存,通常不只是一個用戶,而是大量用戶在使用代理緩存。正因為如此,他們特別擅長降低延遲和網路傳輸量。這是因為眾人都需要的表述會被多次重復使用。
網關緩存
網關緩存又名「反向代理緩存」或「替代緩存」。網關緩存也是一種中介,它他們不是由網路管理員部署以節約帶寬,而是由網站管理員自己部署,使其站點更具伸縮性、可靠性以及擁有更好的性能。
很多方法都可以把請求路由到網關緩存,但常見的方法是使用負載均衡器讓他們對於客戶來說,看起來就跟源伺服器一樣。
內容分發網路(CDN)在整個Internet(或它的一部分)中分發網關緩存,並將其出售給對此感興趣的網站。
Web緩存對我有壞處么?我為什麼要幫助它們?
Web緩存是互聯網中誤解深的技術之一。因為代理緩存可以隱藏使用網站的用戶,所以網站管理員特別害怕失去對他們的站點的控制,這會使得他們很難去知道是誰在使用他們的站點。
然而不幸的是,即使沒有Web緩存,網路上也有非常多的因素可以保證管理員精確的知道一個用戶如何使用他們的站點。如果這是你非常關注的問題的話,這篇手冊將會指導你如何在站點沒有不友好的緩存機制的情況下獲取你需要的統計信息。
⑹ 伺服器緩存怎麼清理centos
total used free shared buffers cached
Mem: 3832 2716 1115 0 95 1483
-/+ buffers/cache: 1137 2695
Swap: 6015 0 6015
從上面可以看到內存中的緩存又1483M之多,幸虧我的內存是4G的,如果是2G就吃不消了
2、使用sync命令將存於 buffer 中的資料強制寫入硬碟中
3、使用以下命令清除緩存,釋放空間
⑺ 伺服器裡面的物理內存緩存如何刪除或者設置不要,這個緩存一直增加很快就把運行的內存給占滿了
一般情況下不要管,伺服器操作系統能很好地處理緩存的清理問題!,如果伺服器的負荷過大,可以考慮增加CPU或者增加內存來處理,這要根據伺服器的用途來決定!!
⑻ WINDOWS7清除伺服器IIS緩存的方法
HTTP裡面有一條自定義的命令叫做Cache-Control;no-cache,能找到嗎?接下去我們來清楚IIS:1,打開IIS配置管理工具,選中一個網站,如果你想為所有站點清楚緩存的話,就短重「網站」,然後點屬性,會彈出一個新的配置窗口。2,選中「HTTP頭」TAB標簽,然後找到自定義HTTP頭。3,點擊旁邊的「添加」按鈕,把上面那條命令添加上去----在彈出的窗口中,自定義HTTP頭名哪裡輸入Cache-Conteol,在自定義HTTP頭值中輸入no-cache。4,一路確定到底到保存即可。WINDOWS7清除伺服器IIS緩存的方法
⑼ 如何清除WEB伺服器的緩存
清除web伺服器(網站)的緩存的方法有三種
登錄網站web端後台,清除緩存;
通過FTP等工具連接網站,進入根目錄,刪除緩存文件夾;
通過瀏覽器清除本地電腦的緩存。
⑽ 伺服器的DNS緩存如何去清理
裝個360伺服器衛士在電腦上,用它可以對DNS進行修復