鎮樓小姐姐
36份一線互聯網Java面試電子書
84個Java稀缺面試題視頻
作者 陳彩華
文章轉載交流請聯繫 caison@aliyun.com
本文主要介紹大型分佈式系統中緩存的相關理論,常見的緩存組件以及應用場景。
1 緩存概述
2 緩存的分類
緩存主要分為以下四類
2.1 CDN緩存
基本介紹
CDN(Content Delivery Network 內容分發網絡)的基本原理是廣泛採用各種緩存服務器,將這些緩存服務器分佈到用戶訪問相對集中的地區或網絡中,在用戶訪問網站時,利用全局負載技術將用戶的訪問指向距離最近的工作正常的緩存服務器上,由緩存服務器直接響應用戶請求
應用場景
主要緩存靜態資源,例如圖片,視頻
應用圖
優點
2.2 反向代理緩存
基本介紹
反向代理位於應用服務器機房,處理所有對WEB服務器的請求。 如果用戶請求的頁面在代理服務器上有緩衝的話,代理服務器直接將緩衝內容發送給用戶。如果沒有緩衝則先向WEB服務器發出請求,取回數據,本地緩存後再發送給用戶。通過降低向WEB服務器的請求數,從而降低了WEB服務器的負載。
應用場景
一般只緩存體積較小靜態文件資源,如css、js、圖片
應用圖
開源實現
2.3 本地應用緩存
基本介紹
指的是在應用中的緩存組件,其最大的優點是應用和cache是在同一個進程內部,請求緩存非常快速,沒有過多的網絡開銷等,在單應用不需要集群支持或者集群情況下各節點無需互相通知的場景下使用本地緩存較合適; 同時,它的缺點也是應為緩存跟應用程序耦合,多個應用程序無法直接的共享緩存,各應用或集群的各節點都需要維護自己的單獨緩存,對內存是一種浪費。
應用場景
緩存字典等常用數據
緩存介質
實現
編程直接實現
EHCACHE
基本介紹
Ehcache是一種基於標準的開源緩存,可提高性能,卸載數據庫並簡化可伸縮性。 它是使用最廣泛的基於Java的緩存,因為它功能強大,經過驗證,功能齊全,並與其他流行的庫和框架集成。Ehcache可以從進程內緩存擴展到使用TB級緩存的混合進程內/進程外部署
應用場景
EHCACHE架構圖
EHCACHE主要特徵
EHCACHE緩存數據過期策略
EHCACHE過期數據淘汰機制
懶淘汰機制:每次往緩存放入數據的時候,都會存一個時間,在讀取的時候要和設置的時間做TTL比較來判斷是否過期
GUAVA CACHE
2.4 分佈式緩存
基本介紹
Guava Cache是Google開源的Java重用工具集庫Guava裡的一款緩存工具
特點與功能
應用場景
數據結構圖
緩存更新策略
緩存回收策略
2.4 分佈式緩存
指的是與應用分離的緩存組件或服務,其最大的優點是自身就是一個獨立的應用,與本地應用隔離,多個應用可直接的共享緩存。
主要應用場景
主要接入方式
下面介紹分佈式緩存常見的2大開源實現Memcached和Redis
Memcached
基本介紹
Memcached是一個高性能,分佈式內存對象緩存系統,通過在內存裡維護一個統一的巨大的hash表,它能夠用來存儲各種格式的數據,包括圖像、視頻、文件以及數據庫檢索的結果等。簡單的說就是將數據調用到內存中,然後從內存中讀取,從而大大提高讀取速度。
特點
基本架構
緩存數據過期策略
LRU(最近最少使用)到期失效策略,在Memcached內存儲數據項時,可以指定它在緩存的失效時間,默認為永久。當Memcached服務器用完分配的內時,失效的數據被首先替換,然後也是最近未使用的數據。
數據淘汰內部實現
懶淘汰機制:每次往緩存放入數據的時候,都會存一個時間,在讀取 的時候要和設置的時間做TTL比較來判斷是否過期
分佈式集群實現
服務端並沒有 “ 分佈式 ” 功能。每個服務器都是完全獨立和隔離的服務。 Memcached的分佈式,是由客戶端程序實現的
Redis
基本介紹
Redis是一個遠程內存數據庫(非關係型數據庫),性能強勁,具有複製特性以及解決問題而生的獨一無二的數據模型。它可以存儲鍵值對與5種不同類型的值之間的映射,可以將存儲在內存的鍵值對數據持久化到硬盤,可以使用複製特性來擴展讀性能, Redis還可以使用客戶端分片來擴展寫性能。內置了 複製(replication),LUA腳本(Lua>
數據模型
數據淘汰策略
數據淘汰內部實現
持久化方式
底層實現部分解析
圖片來自CSDN博主——上帝禁區,如果有哪位神仙知道是用什麼畫圖軟件畫的歡迎評論,我也很想知道。
啟動的部分過程圖解server端持久化的部分操作圖解
底層哈希表實現(漸進式Rehash)
初始化字典
新增字典元素圖解
REHASH執行流程
緩存設計原則
Redis與Memcached比較