本文主要介紹大型分布式系統(tǒng)中緩存的相關(guān)理論,常見的緩存組件以及應(yīng)用場景。
創(chuàng)新互聯(lián)是工信部頒發(fā)資質(zhì)IDC服務(wù)器商,為用戶提供優(yōu)質(zhì)的BGP機(jī)房服務(wù)器托管服務(wù)1 緩存概述
緩存概述
2 緩存的分類
緩存主要分為以下四類
緩存的分類
2.1 CDN緩存
基本介紹
CDN(Content Delivery Network 內(nèi)容分發(fā)網(wǎng)絡(luò))的基本原理是廣泛采用各種緩存服務(wù)器,將這些緩存服務(wù)器分布到用戶訪問相對(duì)集中的地區(qū)或網(wǎng)絡(luò)中,在用戶訪問網(wǎng)站時(shí),利用全局負(fù)載技術(shù)將用戶的訪問指向距離最近的工作正常的緩存服務(wù)器上,由緩存服務(wù)器直接響應(yīng)用戶請(qǐng)求
應(yīng)用場景
主要緩存靜態(tài)資源,例如圖片,視頻
應(yīng)用圖
未使用CDN緩存
使用CDN緩存
優(yōu)點(diǎn)
優(yōu)點(diǎn)
2.2 反向代理緩存
基本介紹
反向代理位于應(yīng)用服務(wù)器機(jī)房,處理所有對(duì)WEB服務(wù)器的請(qǐng)求。
如果用戶請(qǐng)求的頁面在代理服務(wù)器上有緩沖的話,代理服務(wù)器直接將緩沖內(nèi)容發(fā)送給用戶。如果沒有緩沖則先向WEB服務(wù)器發(fā)出請(qǐng)求,取回?cái)?shù)據(jù),本地緩存后再發(fā)送給用戶。通過降低向WEB服務(wù)器的請(qǐng)求數(shù),從而降低了WEB服務(wù)器的負(fù)載。
應(yīng)用場景
一般只緩存體積較小靜態(tài)文件資源,如css、js、圖片
應(yīng)用圖
反向代理緩存應(yīng)用圖
開源實(shí)現(xiàn)
開源實(shí)現(xiàn)
2.3 本地應(yīng)用緩存
基本介紹
指的是在應(yīng)用中的緩存組件,其大的優(yōu)點(diǎn)是應(yīng)用和cache是在同一個(gè)進(jìn)程內(nèi)部,請(qǐng)求緩存非??焖伲瑳]有過多的網(wǎng)絡(luò)開銷等,在單應(yīng)用不需要集群支持或者集群情況下各節(jié)點(diǎn)無需互相通知的場景下使用本地緩存較合適;
同時(shí),它的缺點(diǎn)也是應(yīng)為緩存跟應(yīng)用程序耦合,多個(gè)應(yīng)用程序無法直接的共享緩存,各應(yīng)用或集群的各節(jié)點(diǎn)都需要維護(hù)自己的單獨(dú)緩存,對(duì)內(nèi)存是一種浪費(fèi)。
應(yīng)用場景
緩存字典等常用數(shù)據(jù)
緩存介質(zhì)
緩存介質(zhì)
實(shí)現(xiàn)
編程直接實(shí)現(xiàn)
編程直接實(shí)現(xiàn)
Ehcache
基本介紹
Ehcache是??一種基于標(biāo)準(zhǔn)的開源緩存,可提高性能,卸載數(shù)據(jù)庫并簡化可伸縮性。
它是使用最廣泛的基于Java的緩存,因?yàn)樗δ軓?qiáng)大,經(jīng)過驗(yàn)證,功能齊全,并與其他流行的庫和框架集成。Ehcache可以從進(jìn)程內(nèi)緩存擴(kuò)展到使用TB級(jí)緩存的混合進(jìn)程內(nèi)/進(jìn)程外部署
應(yīng)用場景
Ehcache應(yīng)用場景
Ehcache架構(gòu)圖
Ehcache架構(gòu)圖
Ehcache主要特征
Ehcache主要特征
Ehcache緩存數(shù)據(jù)過期策略
緩存數(shù)據(jù)過期策略.png
Ehcache過期數(shù)據(jù)淘汰機(jī)制
懶淘汰機(jī)制 :每次往緩存放入數(shù)據(jù)的時(shí)候,都會(huì)存一個(gè)時(shí)間,在讀取的時(shí)候要和設(shè)置的時(shí)間做TTL比較來判斷是否過期
Guava Cache
2.4 分布式緩存
基本介紹
Guava Cache是Google開源的Java重用工具集庫Guava里的一款緩存工具
特點(diǎn)與功能
Guava Cache特點(diǎn)與功能.png
應(yīng)用場景
Guava Cache應(yīng)用場景.png
數(shù)據(jù)結(jié)構(gòu)圖
Guava Cache數(shù)據(jù)結(jié)構(gòu)圖
Guava Cache結(jié)構(gòu)特點(diǎn).png
緩存更新策略
Guava Cache 緩存更新策略
緩存回收策略
Guava Cache緩存回收策略.png
2.4 分布式緩存
指的是與應(yīng)用分離的緩存組件或服務(wù),其大的優(yōu)點(diǎn)是自身就是一個(gè)獨(dú)立的應(yīng)用,與本地應(yīng)用隔離,多個(gè)應(yīng)用可直接的共享緩存。
主要應(yīng)用場景
分布式緩存應(yīng)用場景.png
主要接入方式
分布式緩存接入方式.png
下面介紹分布式緩存常見的2大開源實(shí)現(xiàn)Memcached和Redis
Memcached
基本介紹
Memcached是一個(gè)高性能,分布式內(nèi)存對(duì)象緩存系統(tǒng),通過在內(nèi)存里維護(hù)一個(gè)統(tǒng)一的巨大的hash表,它能夠用來存儲(chǔ)各種格式的數(shù)據(jù),包括圖像、視頻、文件以及數(shù)據(jù)庫檢索的結(jié)果等。簡單的說就是將數(shù)據(jù)調(diào)用到內(nèi)存中,然后從內(nèi)存中讀取,從而大大提高讀取速度。
特點(diǎn)
Memcached特點(diǎn)
基本架構(gòu)
Memcached基本架構(gòu)
緩存數(shù)據(jù)過期策略
LRU(最近最少使用)到期失效策略 ,在Memcached內(nèi)存儲(chǔ)數(shù)據(jù)項(xiàng)時(shí),可以指定它在緩存的失效時(shí)間,默認(rèn)為永久。當(dāng)Memcached服務(wù)器用完分配的內(nèi)時(shí),失效的數(shù)據(jù)被首先替換,然后也是最近未使用的數(shù)據(jù)。
數(shù)據(jù)淘汰內(nèi)部實(shí)現(xiàn)
懶淘汰機(jī)制 :每次往緩存放入數(shù)據(jù)的時(shí)候,都會(huì)存一個(gè)時(shí)間,在讀取
的時(shí)候要和設(shè)置的時(shí)間做TTL比較來判斷是否過期
分布式集群實(shí)現(xiàn)
服務(wù)端并沒有 “ 分布式 ” 功能。每個(gè)服務(wù)器都是完全獨(dú)立和隔離的服務(wù)。 Memcached的分布式,是由客戶端程序?qū)崿F(xiàn)的
數(shù)據(jù)讀寫流程圖
Memcached分布式集群實(shí)現(xiàn)
Redis
基本介紹
Redis是一個(gè)遠(yuǎn)程內(nèi)存數(shù)據(jù)庫(非關(guān)系型數(shù)據(jù)庫) ,性能強(qiáng)勁,具有復(fù)制特性以及解決問題而生的獨(dú)一無二的數(shù)據(jù)模型。它可以存儲(chǔ)鍵值對(duì)與5種不同類型的值之間的映射,可以將存儲(chǔ)在內(nèi)存的鍵值對(duì)數(shù)據(jù)持久化到硬盤,可以使用復(fù)制特性來擴(kuò)展讀性能,
Redis還可以使用客戶端分片來擴(kuò)展寫性能。內(nèi)置了 復(fù)制(replication),LUA腳本(Lua scripting),LRU驅(qū)動(dòng)事件(LRU eviction),事務(wù)(transactions) 和不同級(jí)別的 磁盤持久化(persistence), 并通過 Redis哨兵(Sentinel)和自動(dòng)分區(qū)(Cluster)提供高可用性(high availability)。
數(shù)據(jù)模型
Redis數(shù)據(jù)模型
數(shù)據(jù)淘汰策略
Redis數(shù)據(jù)淘汰策略
數(shù)據(jù)淘汰內(nèi)部實(shí)現(xiàn)
Redis數(shù)據(jù)淘汰內(nèi)部實(shí)現(xiàn).png
持久化方式
Redis持久化方式
底層實(shí)現(xiàn)部分解析
啟動(dòng)的部分過程圖解
啟動(dòng)的部分過程
server端持久化的部分操作圖解
server端持久化的部分操作
底層哈希表實(shí)現(xiàn)(漸進(jìn)式Rehash)
初始化字典
初始化字典
新增字典元素圖解
新增字典元素圖解
Rehash執(zhí)行流程
Rehash執(zhí)行流程
緩存設(shè)計(jì)原則
Redis緩存設(shè)計(jì)原則.png
迎工作一到五年的Java工程師朋友們加入Java架構(gòu)開發(fā):860113481
群內(nèi)提供免費(fèi)的Java架構(gòu)學(xué)習(xí)資料(里面有高可用、高并發(fā)、高性能及分布式、Jvm性能調(diào)優(yōu)、Spring源碼,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多個(gè)知識(shí)點(diǎn)的架構(gòu)資料)合理利用自己每一分每一秒的時(shí)間來學(xué)習(xí)提升自己,不要再用"沒有時(shí)間“來掩飾自己思想上的懶惰!趁年輕,使勁拼,給未來的自己一個(gè)交代!
Redis與Memcached比較
網(wǎng)頁名稱:深入理解分布式系統(tǒng)中的緩存架構(gòu)(上)-創(chuàng)新互聯(lián)
地址分享:http://www.rwnh.cn/article20/dpepjo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供云服務(wù)器、品牌網(wǎng)站制作、全網(wǎng)營銷推廣、外貿(mào)建站、做網(wǎng)站、微信公眾號(hào)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容