不同的場(chǎng)景下如何選擇和使用適用的緩存框架
推薦 + 挑錯(cuò) + 收藏(0) + 用戶評(píng)論(0)
,講述在不同的場(chǎng)景下如何選擇和使用適用的緩存框架,以達(dá)到提升服務(wù)質(zhì)量,優(yōu)化系統(tǒng)架構(gòu)的目的。
一般而言,現(xiàn)在互聯(lián)網(wǎng)模式(一個(gè)網(wǎng)站或一個(gè)應(yīng)用),整體流程可以概括描述為 瀏覽器→應(yīng)用服務(wù)器→數(shù)據(jù)庫(kù)或文件(存儲(chǔ))→應(yīng)用服務(wù)器→瀏覽器,這是一個(gè)標(biāo)準(zhǔn)流程,通過(guò)瀏覽器(或App界面)發(fā)起請(qǐng)求,經(jīng)過(guò)服務(wù)器、數(shù)據(jù)庫(kù)計(jì)算整合后反饋瀏覽器呈現(xiàn)內(nèi)容。隨著互聯(lián)網(wǎng)的普及,內(nèi)容信息越來(lái)越復(fù)雜,使用者和訪問(wèn)量越來(lái)越大,我們的應(yīng)用需要支撐更多的并發(fā)量,同時(shí)我們的應(yīng)用服務(wù)器和數(shù)據(jù)庫(kù)服務(wù)器所做的計(jì)算也越來(lái)越多。但是往往我們的應(yīng)用服務(wù)器資源是有限的,且技術(shù)變革是緩慢的,數(shù)據(jù)庫(kù)每秒能接受的請(qǐng)求次數(shù)也是有限的(或者文件的讀寫也是有限的),如何能夠有效利用有限的資源來(lái)提供盡可能大的吞吐量?一個(gè)有效的辦法就是減少計(jì)算量,縮短請(qǐng)求流程——這就是緩存。緩存的出現(xiàn)就是打破上述的標(biāo)準(zhǔn)流程,其中的任何一個(gè)環(huán)節(jié)都可以被截?cái)?,?qǐng)求可以從緩存中直接獲取目標(biāo)數(shù)據(jù)并返回。通過(guò)這種打破常規(guī)的方式,有效減少計(jì)算量,縮短請(qǐng)求流程,有效提升響應(yīng)速度,節(jié)省硬件資源,讓有限的資源服務(wù)更多的用戶。
如圖1所示,緩存的使用可以出現(xiàn)在 1-4的各個(gè)環(huán)節(jié)中,每個(gè)環(huán)節(jié)的緩存方案與使用各有特點(diǎn)。
圖1 網(wǎng)絡(luò)應(yīng)用一般流程
緩存特征
根據(jù)面向?qū)ο蟮能浖季S來(lái)看,緩存就是一個(gè)對(duì)象類型,那么必然有它的屬性:
命中率
命中率=返回正確結(jié)果數(shù)/請(qǐng)求緩存次數(shù),命中率問(wèn)題是緩存中的一個(gè)非常重要的問(wèn)題,它是衡量緩存有效性的重要指標(biāo)。命中率越高,表明緩存的使用率越高。
最大元素(或最大空間)
緩存中可以存放的最大元素的數(shù)量,一旦緩存中元素?cái)?shù)量超過(guò)這個(gè)值(或者緩存數(shù)據(jù)所占空間超過(guò)其最大支持空間),那么將會(huì)觸發(fā)緩存啟動(dòng)清空策略根據(jù)不同的場(chǎng)景合理的設(shè)置最大元素值往往可以一定程度上提高緩存的命中率,從而更有效的時(shí)候緩存。
清空策略
如上描述,緩存的存儲(chǔ)空間有限制,當(dāng)緩存空間被用滿時(shí),如何保證在穩(wěn)定服務(wù)的同時(shí)有效提升命中率?這就由緩存清空策略來(lái)處理,設(shè)計(jì)適合自身數(shù)據(jù)特征的情況策略能有效提升命中率。常見(jiàn)的一般策略有:
a. FIFO(first in first out)
先進(jìn)先出策略,最先進(jìn)入緩存的數(shù)據(jù)在緩存空間不夠的情況下(超出最大元素限制)會(huì)被優(yōu)先被清除掉,以騰出新的空間接受新的數(shù)據(jù)。策略算法主要比較緩存元素的創(chuàng)建時(shí)間。
b. LFU(less frequently used)
最少使用策略,無(wú)論是否過(guò)期,根據(jù)元素的被使用次數(shù)判斷,清除使用次數(shù)較少的元素釋放空間。策略算法主要比較元素的hitCount(命中次數(shù))。
c. LRU(least recently used)
最近最少使用策略,無(wú)論是否過(guò)期,根據(jù)元素最后一次被使用的時(shí)間戳,清除最遠(yuǎn)使用時(shí)間戳的元素釋放空間。策略算法主要比較元素最近一次被get使用時(shí)間。
除此之外,還有一些簡(jiǎn)單策略比如:
根據(jù)過(guò)期時(shí)間判斷,清理過(guò)期時(shí)間最長(zhǎng)的元素;
根據(jù)過(guò)期時(shí)間判斷,清理最近要過(guò)期的元素;
隨機(jī)清理;
根據(jù)關(guān)鍵字(或元素內(nèi)容)長(zhǎng)短清理等。
緩存介質(zhì)
(從硬件介質(zhì)上來(lái)看,無(wú)非就是內(nèi)存和硬盤兩種)從技術(shù)上劃分,可以分成幾種,內(nèi)存、硬盤文件、數(shù)據(jù)庫(kù)。
內(nèi)存:將緩存存儲(chǔ)于內(nèi)存中是最快的選擇,無(wú)需額外的I/O開(kāi)銷,但是內(nèi)存的缺點(diǎn)是沒(méi)有持久化落地物理磁盤,一旦應(yīng)用異常break down,重新啟動(dòng)數(shù)據(jù)很難或者無(wú)法復(fù)原。
硬盤:一般來(lái)說(shuō),很多緩存框架會(huì)結(jié)合使用內(nèi)存和硬盤,在內(nèi)存分配空間滿了或是在異常的情況下,可以被動(dòng)或主動(dòng)的將內(nèi)存空間數(shù)據(jù)持久化到硬盤中,達(dá)到釋放空間或備份數(shù)據(jù)的目的。
數(shù)據(jù)庫(kù):前面我們有提到,增加緩存的策略的目的之一就是為了減少數(shù)據(jù)庫(kù)的I/O壓力?,F(xiàn)在使用數(shù)據(jù)庫(kù)做緩存介質(zhì)是不是又回到了老問(wèn)題上了?其實(shí),數(shù)據(jù)庫(kù)也有很多種類型,像那些不支持SQL,只是簡(jiǎn)單的key、value的存儲(chǔ)結(jié)構(gòu)的特殊數(shù)據(jù)庫(kù)(如berkleydb),響應(yīng)速度和吞吐量都遠(yuǎn)遠(yuǎn)高于我們常用的關(guān)系型數(shù)據(jù)庫(kù)等。
在目前的應(yīng)用服務(wù)框架中,我們對(duì)緩存的分類劃分更常用的是根據(jù)緩存與應(yīng)用的耦合程度,劃分為local cache(本地緩存)和remote cache(分布式緩存):
Local cache:指的是在應(yīng)用中的緩存組件,其最大的優(yōu)點(diǎn)是應(yīng)用和cache是在同一個(gè)進(jìn)程內(nèi)部,請(qǐng)求緩存非常快速,沒(méi)有過(guò)多的網(wǎng)絡(luò)開(kāi)銷等,在單應(yīng)用不需要集群支持或者集群情況下各節(jié)點(diǎn)無(wú)需互相通知的場(chǎng)景下使用本地緩存較合適;同時(shí),它的缺點(diǎn)也是應(yīng)為緩存跟應(yīng)用程序耦合,多個(gè)應(yīng)用程序無(wú)法直接的共享緩存,各應(yīng)用或集群的各節(jié)點(diǎn)都需要維護(hù)自己的單獨(dú)緩存,對(duì)內(nèi)存是一種浪費(fèi)。
Remote cache::指的是與應(yīng)用分離的緩存組件或服務(wù),其最大的優(yōu)點(diǎn)是自身就是一個(gè)獨(dú)立的應(yīng)用,與本地應(yīng)用隔離,多個(gè)應(yīng)用可直接的共享緩存。
目前各種類型的緩存都活躍在成千上萬(wàn)的應(yīng)用服務(wù)中,還沒(méi)有一種緩存方案可以解決一切的業(yè)務(wù)場(chǎng)景或數(shù)據(jù)類型,我們需要根據(jù)自身的特殊場(chǎng)景和背景,選擇最適合的緩存方案。緩存的使用是程序員、架構(gòu)師的必備技能,好的程序員能根據(jù)數(shù)據(jù)類型、業(yè)務(wù)場(chǎng)景來(lái)準(zhǔn)確判斷使用何種類型的緩存,如何使用這種緩存,以最小的成本最快的效率達(dá)到最優(yōu)的目的。
非常好我支持^.^
(0) 0%
不好我反對(duì)
(0) 0%
下載地址
不同的場(chǎng)景下如何選擇和使用適用的緩存框架下載
相關(guān)電子資料下載
- 常用于緩存處理的機(jī)制總結(jié) 如何避免緩存雪崩問(wèn)題? 24
- 如何保證緩存一致性 115
- fpga跨時(shí)鐘域通信時(shí),慢時(shí)鐘如何讀取快時(shí)鐘發(fā)送過(guò)來(lái)的數(shù)據(jù)? 153
- 研揚(yáng)科技BOXER-6617-ADN提供堅(jiān)固耐用的無(wú)風(fēng)扇工業(yè)迷你PC支持 340
- AMD Radeon RX 6750 GRE顯卡參數(shù) 62
- Boltons:超過(guò)230個(gè)的純Python實(shí)用工具庫(kù) 79
- 緩存的好處和類型 84
- 華為云分布式緩存服務(wù)DCS,它與開(kāi)源Redis有哪些差異,快來(lái)一探究竟! 119
- 密碼算法實(shí)現(xiàn)的FIA防護(hù) 45
- java如何處理圖片水印 66