幾乎全部的項目都作了緩存,可是緩存作的怎麼樣,其實只有咱們本身知道。緩存作的好,沒有網絡也能流暢的使用;再多的數據請求都不會出現卡頓延遲等待好久的狀況。前端
程序中除了圖片緩存(三級緩存),還有信息緩存。當用戶沒法聯網時,app會默認顯示緩存的數據。android
下載完數據文件後,把文件的相關信息如url,路經,下載時間,過時時間等存放到數據庫,把url做爲惟一的標識。下次下載的時候根據url先從數據庫中查詢,若是查詢到當前時間並未過時,就根據路徑讀取本地文件,從而實現緩存的效果。程序員
文件緩存使用File.lastModified()方法獲得文件的最後修改時間,與當前時間判斷是否過時,從而實現緩存效果。數據格式爲JSON。面試
緩存方式兩點說明算法
一、不一樣類型的文件的緩存時間不同。籠統的說,不變文件的緩存時間是永久,變化文件的緩存時間是最大忍受不變時間。說白點,圖片文件內容是不變的,通常存在SD卡上直到被清理,咱們是能夠永遠讀取緩存的。配置文件內容是可能更新的,須要設置一個可接受的緩存時間。數據庫
二、不一樣環境下的緩存時間標準不同。無網絡環境下,咱們只能讀取緩存文件,爲了應用有東西顯示,沒有什麼過時之說了。後端
網絡環境下,緩存時間能夠設置短一點,一是網速較快,而是流量不要錢。緩存
流量環境下,緩存時間能夠設置長一點,節省流量,並且用戶體驗也更好。安全
緩存時間服務器
app中多個頁面的緩存時間是不同的,對實時性要求高的頁面緩存時間較短。而http消息頭中包含有緩存時間,android端無需本身記錄/規定緩存時間,讀取便可。
http協議對緩存的支持
Expires & Cache-Control
Expires響應首部給出了響應失效的絕對時間,這樣客戶端就能夠緩存一份副本,在這個時間到期以前,
不用去詢問服務器它是否有效了。http1.0引入。 例:Expires: Thu, 03 Oct 1997 17:15:00 GMT
Cache-Control首部用於傳輸對象的緩存信息。http1.1引入。它的值是一個緩存指令,給出了與某個對象可緩存性有關的特有指令。這個首部能夠出如今請求或者響應頭中。例如:Cache-Control: no-cache
CacheControl
有兩個字段表達響應的過時時間:max-age和max-stale
前者表示:max-age秒內,網頁再有請求,你不要來我服務端,直接取你本地緩存的結果好了
後者表示:max-stale秒內的請求,你可使用本地緩存的,但仍是要來我服務端問問,到底行不行,固然,這裏要帶上Last Modified等信息 ,若是服務端返回了304,那說明你本地緩存繼續用吧,我不給你響應體200的話,天然就帶上了響應體。
Expires和Cache-Control做用一致,都是指當前資源的有效期,控制是直接從緩存獲取數據仍是從新發送請求到服務器取數據。
一、LRU - 最近最少使用(最後訪問時間)替換掉最近被請求最少的文檔。這一傳統策略在實際中應用最廣。在CPU緩存淘汰和虛擬內存系統中效果較好。
二、LRU-K
LRU-K
中的K表明最近使用的次數,也能夠認爲是LRU-1。LRU-K的主要目的是爲了解決LRU算法「緩存污染」的問題,其核心思想是將「最近使用過1次」的判斷標準擴展爲「最近使用過K次」。相比LRU,LRU-K須要多維護一個隊列,用於記錄全部緩存數據被訪問的歷史。只有當數據的訪問次數達到K次的時候,纔將數據放入緩存。當須要淘汰數據時,LRU-K會淘汰第K次訪問時間距當前時間最大的數據。以下:
3. LFU - 最不常用(訪問次數)替換掉訪問次數最少的。這一策略意圖保留最經常使用的、最流行的對象,替換掉不多使用的那些。
LFU
的每一個數據塊都有一個引用計數,全部數據塊按照引用計數排序,具備相同引用計數的數據塊則按照時間排序。以下:
4. SIZE(緩存大小)替換size最大的對象。這一策略經過淘汰一個大對象而不是多個小對象來提升命中率。不過,可能有些進入緩存的小對象永遠不會再被訪問。SIZE策略沒有提供淘汰這類對象的機制,會致使「緩存污染」(大量偶發性的數據訪問讓內存中存放大量冷數據,也便是緩存污染)。
引伸幾個問題,面試常被問到的問題:
一、http的緩存是怎麼作的 ? 二、用的什麼?(這個問題和線程會同問,通常問一個。) 答案請自行百度。我就不說了。由於我看過http的源碼,看過他的緩存和線程。是自定義的。你們作一個瞭解就行。
這個問題被問到的頻率不高。而高頻問的通常是這種問題:有一個網絡請求,有不少數據(好比一年,兩年,天天的數據都要請求出來),而後拿到數據後作處理,而後recycleview(或listview)展現出來。像這種請求因爲數據不少, 會有一段時間的等待,致使頁面UI數據延遲的狀況的解決方案。你們內心要作一個準備。
做者:小餅乾也有夢想 連接:www.jianshu.com/p/461554b2c…
在這裏得到的不只僅是技術!