本文主要介紹大型分佈式系統中緩存的相關理論,常見的緩存組件以及應用場景。css
1 緩存概述面試
緩存概述數據庫
2 緩存的分類編程
緩存主要分爲如下四類緩存
緩存的分類服務器
2.1 CDN緩存網絡
基本介紹數據結構
CDN(Content Delivery Network 內容分發網絡)的基本原理是普遍採用各類緩存服務器,將這些緩存服務器分佈到用戶訪問相對集中的地區或網絡中,在用戶訪問網站時,利用全局負載技術將用戶的訪問指向距離最近的工做正常的緩存服務器上,由緩存服務器直接響應用戶請求架構
應用場景框架
主要緩存靜態資源,例如圖片,視頻
應用圖
未使用CDN緩存
使用CDN緩存
優勢
優勢
2.2 反向代理緩存
基本介紹
反向代理位於應用服務器機房,處理全部對WEB服務器的請求。
若是用戶請求的頁面在代理服務器上有緩衝的話,代理服務器直接將緩衝內容發送給用戶。若是沒有緩衝則先向WEB服務器發出請求,取回數據,本地緩存後再發送給用戶。經過下降向WEB服務器的請求數,從而下降了WEB服務器的負載。
應用場景
通常只緩存體積較小靜態文件資源,如css、js、圖片
應用圖
反向代理緩存應用圖
開源實現
開源實現
2.3 本地應用緩存
基本介紹
指的是在應用中的緩存組件,其最大的優勢是應用和cache是在同一個進程內部,請求緩存很是快速,沒有過多的網絡開銷等,在單應用不須要集羣支持或者集羣狀況下各節點無需互相通知的場景下使用本地緩存較合適;
同時,它的缺點也是應爲緩存跟應用程序耦合,多個應用程序沒法直接的共享緩存,各應用或集羣的各節點都須要維護本身的單獨緩存,對內存是一種浪費。
應用場景
緩存字典等經常使用數據
緩存介質
緩存介質
實現
編程直接實現
編程直接實現
Ehcache
基本介紹
Ehcache是??一種基於標準的開源緩存,可提升性能,卸載數據庫並簡化可伸縮性。
它是使用最普遍的基於Java的緩存,由於它功能強大,通過驗證,功能齊全,並與其餘流行的庫和框架集成。Ehcache能夠從進程內緩存擴展到使用TB級緩存的混合進程內/進程外部署
應用場景
Ehcache應用場景
Ehcache架構圖
Ehcache架構圖
Ehcache主要特徵
Ehcache主要特徵
Ehcache緩存數據過時策略
緩存數據過時策略.png
Ehcache過時數據淘汰機制
懶淘汰機制:每次往緩存放入數據的時候,都會存一個時間,在讀取的時候要和設置的時間作TTL比較來判斷是否過時
Guava Cache
2.4 分佈式緩存
基本介紹
Guava Cache是Google開源的Java重用工具集庫Guava裏的一款緩存工具
特色與功能
Guava Cache特色與功能.png
應用場景
Guava Cache應用場景.png
數據結構圖
Guava Cache數據結構圖
Guava Cache結構特色.png
緩存更新策略
Guava Cache 緩存更新策略
緩存回收策略
Guava Cache緩存回收策略.png
2.4 分佈式緩存
指的是與應用分離的緩存組件或服務,其最大的優勢是自身就是一個獨立的應用,與本地應用隔離,多個應用可直接的共享緩存。
主要應用場景
分佈式緩存應用場景.png
主要接入方式
分佈式緩存接入方式.png
下面介紹分佈式緩存常見的2大開源實現Memcached和Redis
Memcached
基本介紹
Memcached是一個高性能,分佈式內存對象緩存系統,經過在內存裏維護一個統一的巨大的hash表,它可以用來存儲各類格式的數據,包括圖像、視頻、文件以及數據庫檢索的結果等。簡單的說就是將數據調用到內存中,而後從內存中讀取,從而大大提升讀取速度。
特色
Memcached特色
基本架構
Memcached基本架構
緩存數據過時策略
LRU(最近最少使用)到期失效策略,在Memcached內存儲數據項時,能夠指定它在緩存的失效時間,默認爲永久。當Memcached服務器用完分配的內時,失效的數據被首先替換,而後也是最近未使用的數據。
數據淘汰內部實現
懶淘汰機制:每次往緩存放入數據的時候,都會存一個時間,在讀取
的時候要和設置的時間作TTL比較來判斷是否過時
分佈式集羣實現
服務端並無 「 分佈式 」 功能。每一個服務器都是徹底獨立和隔離的服務。 Memcached的分佈式,是由客戶端程序實現的
數據讀寫流程圖
Memcached分佈式集羣實現
Redis
基本介紹
Redis是一個遠程內存數據庫(非關係型數據庫),性能強勁,具備複製特性以及解決問題而生的獨一無二的數據模型。它能夠存儲鍵值對與5種不一樣類型的值之間的映射,能夠將存儲在內存的鍵值對數據持久化到硬盤,能夠使用複製特性來擴展讀性能,
Redis還能夠使用客戶端分片來擴展寫性能。內置了 複製(replication),LUA腳本(Lua scripting),LRU驅動事件(LRU eviction),事務(transactions) 和不一樣級別的 磁盤持久化(persistence), 並經過 Redis哨兵(Sentinel)和自動分區(Cluster)提供高可用性(high availability)。
數據模型
Redis數據模型
數據淘汰策略
Redis數據淘汰策略
數據淘汰內部實現
Redis數據淘汰內部實現.png
持久化方式
Redis持久化方式
底層實現部分解析
啓動的部分過程圖解
啓動的部分過程
server端持久化的部分操做圖解
server端持久化的部分操做
底層哈希表實現(漸進式Rehash)
初始化字典
初始化字典
新增字典元素圖解
新增字典元素圖解
Rehash執行流程
Rehash執行流程
緩存設計原則
Redis緩存設計原則.png
歡迎工做一到五年的Java工程師朋友們加入Java架構開發:744677563
本羣提供免費的學習指導 架構資料 以及免費的解答
不懂得問題均可以在本羣提出來 以後還會有職業生涯規劃以及面試指導
Redis與Memcached比較