后臺(tái)開(kāi)發(fā)必備:每個(gè)程序員都應(yīng)掌握的緩存技術(shù)
共 7991字,需瀏覽 16分鐘
·
2024-07-02 08:45
??目錄
1 緩存策略
2 緩存類(lèi)型
3 緩存淘汰策略
4 緩存常見(jiàn)問(wèn)題
5 總結(jié)
-
提升接口響應(yīng)速度:緩存相比 IO 請(qǐng)求、數(shù)據(jù)庫(kù)查詢(xún)速度要快得多,適當(dāng)使用緩存提升響應(yīng)速度 -
降低數(shù)據(jù)源服務(wù)的負(fù)載壓力:將需要高并發(fā)讀取的數(shù)據(jù)緩存起來(lái),當(dāng)相同請(qǐng)求進(jìn)來(lái)時(shí)返回緩存數(shù)據(jù),減輕數(shù)據(jù)源服務(wù)(如數(shù)據(jù)庫(kù)、上游系統(tǒng))的負(fù)載壓力 -
減少計(jì)算資源的浪費(fèi):將需要復(fù)雜且耗時(shí)計(jì)算的結(jié)果緩存起來(lái),減少相同請(qǐng)求導(dǎo)致的重復(fù)計(jì)算資源浪費(fèi)
01
騰訊云 CDN 具有海量資源儲(chǔ)備、全球智能調(diào)度、一鍵接入、豐富功能等產(chǎn)品優(yōu)勢(shì),歡迎企業(yè)及用戶了解試用:https://cloud.tencent.com/product/cdn
02
-
優(yōu)勢(shì): 使用簡(jiǎn)單;無(wú)外部依賴(lài);讀取速度快(無(wú)網(wǎng)絡(luò) IO 請(qǐng)求); -
缺點(diǎn): 空間小:應(yīng)用程序的服務(wù)器資源有限,所以本地緩存的空間小;分布式一致性問(wèn)題:如果后臺(tái)服務(wù)是分布式架構(gòu)的,那么不同的服務(wù)實(shí)例之間的本地緩存可能會(huì)有差異;無(wú)法持久化:本地緩存會(huì)隨著進(jìn)程結(jié)束而被銷(xiāo)毀,無(wú)法持久化。
-
優(yōu)勢(shì): 空間充足:外部存儲(chǔ)一般空間都很充足;無(wú)分布式一致性問(wèn)題:不同的服務(wù)實(shí)例連接同一個(gè)緩存服務(wù),不存在一致性問(wèn)題;主流的分布式緩存,如 redis,支持?jǐn)?shù)據(jù)持久化和恢復(fù),當(dāng)緩存服務(wù)掛了可以恢復(fù)數(shù)據(jù)。 -
缺點(diǎn): 引入外部依賴(lài)、需要部署和運(yùn)維單獨(dú)的緩存服務(wù)。
-
支持多種數(shù)據(jù)結(jié)構(gòu),如:list,set,zset,hash 等數(shù)據(jù)結(jié)構(gòu)。 -
支持?jǐn)?shù)據(jù)的持久化和恢復(fù)。 -
支持多種集群模式:主從復(fù)制、哨兵模式和 Cluster 模式,保證高可用、容災(zāi)恢復(fù)、易于擴(kuò)展。 -
能提供毫秒級(jí)別的響應(yīng)速度。 -
Redis 6.0 引入了多線程 IO,之前是單線程模型。
-
主要支持簡(jiǎn)單的鍵值對(duì)存儲(chǔ)。 -
不支持持久化和恢復(fù)。 -
集群:可以通過(guò)客戶端分片實(shí)現(xiàn)分布式存儲(chǔ)。 -
多線程,非阻塞 IO 模式。 -
能提供毫秒級(jí)別的響應(yīng)速度。
03
04
-
一是大量的緩存 key 在同一時(shí)間失效 -
二是緩存服務(wù)不可用,請(qǐng)求都被透?jìng)鞯綌?shù)據(jù)庫(kù)。
-
設(shè)置合理的緩存失效時(shí)間:合理設(shè)置過(guò)期時(shí)間,分散緩存的失效時(shí)間,避免緩存在同一時(shí)間失效。 -
保證緩存服務(wù)的高可用:使用獨(dú)立的緩存服務(wù),盡量使用緩存集群,保證緩存服務(wù)的高可用和容災(zāi)恢復(fù)。
-
未對(duì)請(qǐng)求參數(shù)進(jìn)行合理的校驗(yàn)和攔截。 -
被精心構(gòu)造的惡意請(qǐng)求攻擊。
-
設(shè)置合理的參數(shù)校驗(yàn):通過(guò)設(shè)置合理的校驗(yàn)規(guī)則,比如 id 范圍、名稱(chēng)正則規(guī)則等,對(duì)不合理或空值請(qǐng)求的參數(shù)的進(jìn)行過(guò)濾和攔截。 -
緩存空值處理:即使數(shù)據(jù)源返回空值,也在緩存層將其保存起來(lái)。可能對(duì)其數(shù)值設(shè)置一些標(biāo)記,比如 value=-1 等等,方便服務(wù)識(shí)別為空值。同時(shí),也可以為空值的緩存設(shè)置一個(gè)較短的失效時(shí)間。
-
使用互斥鎖或者分布式鎖,對(duì)數(shù)據(jù)的回源操作進(jìn)行上鎖,保證同一時(shí)刻只有一個(gè)請(qǐng)求被透?jìng)鞯綌?shù)據(jù)源服務(wù)。 -
熱點(diǎn)數(shù)據(jù)的緩存永不過(guò)期,由數(shù)據(jù)源主動(dòng)更新緩存。 -
熱點(diǎn)數(shù)據(jù)預(yù)加載:在緩存數(shù)據(jù)將要過(guò)期時(shí),由后臺(tái)服務(wù)主動(dòng)更新熱點(diǎn)數(shù)據(jù)緩存,防止緩存失效。
05
????歡迎加入騰訊云開(kāi)發(fā)者社群,享前沿資訊、大咖干貨,找興趣搭子,交同城好友,更有鵝廠招聘機(jī)會(huì)、限量周邊好禮等你來(lái)~
(長(zhǎng)按圖片立即掃碼)
評(píng)論
圖片
表情
