什麼是快取
儲存在計算機上的一個原始資料複製集,以便於訪問。 –維基百科
快取是系統快速響應中的一種關鍵技術,是一組被儲存起來以備將來使用的東西,介於應用開發跟系統開發之間。
根據軟體系統中所處位置的不同,快取大體可以分為三類:
- 客戶端快取
- 伺服器快取
- 網路中的快取
根據規模和部署方式快取也可以分為:
- 單體快取
- 快取叢集
- 分散式快取
客戶端快取
頁面快取:
- 頁面自身的快取或者離線應用快取,頁面自身對某些元素或全部元素進行快取,或服務端將靜態頁面或動態頁面的元素進行快取。
- 頁面快取是將之前渲染的頁面儲存為檔案,當使用者再次訪問時可以避開網路連線,從而減少負載,提升效能和使用者體驗。
瀏覽器快取:
- 根據一套與伺服器約定的規則進行工作:檢查確定副本是否最新,通常只要一次會話。
- 補充——
app快取
網路中的快取
web代理快取
邊緣快取
服務端快取
資料庫快取
- 資料庫屬於IO密集型的應用,主要負責資料的管理及儲存。資料庫快取是一類特殊的快取,是資料庫自身的快取機制。
- 以mysql為例,mysql中使用了查詢緩衝機制,將SELECT語句和查詢結果存放在緩衝區中,以後對於同樣的SELECT語句,講直接從快取區中讀取結果,以節省查詢時間,提高了sql查詢的效率。
平臺級快取
- 在系統開發中,適當的使用平臺級快取往往可以取得事半功倍的效果。
- 在這裡指用來寫帶有快取特性的應用框架,或者可用於快取功能的專用庫。
應用級快取
當平臺級快取不能滿足系統效能要求時,就要考慮使用應用級快取了。應用級快取,需要開發者通過程式碼來實現快取機制,這裡是nosql的勝場,無論是Redis還是MongoDB,以及Memcached都可以作為應用級儲存的重要技術。
快取演算法:在實現快取應用的時候,需要了解快取技術中的幾個術語。
- 快取命中:請求的資料在快取中。
- 沒有命中:cache miss,如果快取中還有儲存空間,那麼沒有命中的物件會被儲存到快取中來。
- 儲存成本:當cache miss,系統會從資料庫或者其他資料來源取出資料,然後放入儲存,這個過程需要時間和空間,這就是快取成本。
- 快取失效:當儲存在快取中的資料需要更新時,就以為著快取中的這一資料失效了。
-
替代策略:當快取沒有命中時,並且快取容量已經滿了,就需要在快取中去除一條舊資料,然後加入一條新資料,替代的選擇就有替代策略決定。
- Least-Recently-Used(LRU):最近被請求最少的物件
- Least-Frequently-Used(LFU):訪問次數最少的物件
-
SIZE:佔用空間最大的物件