緩存特征
緩存特征
命中率
當某個請求能夠通過訪問緩存而得到響應時,稱為緩存命中。
緩存命中率越高,緩存的利用率也就越高。
最大空間
緩存通常位于內存中,內存的空間通常比磁盤空間小的多,因此緩存的最大空間不可能非常大。
當緩存存放的數據量超過最大空間時,就需要淘汰部分數據來存放新到達的數據。
淘汰策略
FIFO(First In First Out):先進先出策略,在實時性的場景下,需要經常訪問最新的數據,那么就可以使用 FIFO,使得最先進入的數據(最晚的數據)被淘汰。
LRU(Least Recently Used):最近最久未使用策略,優先淘汰最久未使用的數據,也就是上次被訪問時間距離現在最久的數據。該策略可以保證內存中的數據都是熱點數據,也就是經常被訪問的數據,從而保證緩存命中率。
LFU(Least Frequently Used):最不經常使用策略,優先淘汰一段時間內使用次數最少的數據。
緩存位置
瀏覽器
當 HTTP 響應允許進行緩存時,瀏覽器會將 HTML、CSS、JavaScript、圖片等靜態資源進行緩存。
ISP
網絡服務提供商(ISP)是網絡訪問的第一跳,通過將數據緩存在 ISP 中能夠大大提高用戶的訪問速度。
反向代理
反向代理位于服務器之前,請求與響應都需要經過反向代理。通過將數據緩存在反向代理,在用戶請求反向代理時就可以直接使用緩存進行響應。
本地緩存
使用 Guava Cache 將數據緩存在服務器本地內存中,服務器代碼可以直接讀取本地內存中的緩存,速度非常快。
分布式緩存
使用 Redis、Memcache 等分布式緩存將數據緩存在分布式緩存系統中。
相對于本地緩存來說,分布式緩存單獨部署,可以根據需求分配硬件資源。不僅如此,服務器集群都可以訪問分布式緩存,而本地緩存需要在服務器集群之間進行同步,實現難度和性能開銷上都非常大。
數據庫緩存
MySQL 等數據庫管理系統具有自己的查詢緩存機制來提高查詢效率。
Java 內部的緩存
Java 為了優化空間,提高字符串、基本數據類型包裝類的創建效率,設計了字符串常量池及 Byte、Short、Character、Integer、Long、Boolean 這六種包裝類緩沖池。
CPU 多級緩存
CPU 為了解決運算速度與主存 IO 速度不匹配的問題,引入了多級緩存結構,同時使用 MESI 等緩存一致性協議來解決多核 CPU 緩存數據一致性的問題。
CDN
內容分發網絡(Content distribution network,CDN)是一種互連的網絡系統,它利用更靠近用戶的服務器從而更快更可靠地將 HTML、CSS、JavaScript、音樂、圖片、視頻等靜態資源分發給用戶。
CDN 主要有以下優點:
更快地將數據分發給用戶;
通過部署多臺服務器,從而提高系統整體的帶寬性能;
多臺服務器可以看成是一種冗余機制,從而具有高可用性。
HTML
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。