偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

關(guān)于緩存,每個(gè)開(kāi)發(fā)人員都應(yīng)該知道的三個(gè)問(wèn)題

存儲(chǔ) 數(shù)據(jù)管理
雖然這些緩存問(wèn)題起初看起來(lái)微不足道,但有時(shí)可能會(huì)對(duì)我們的下游客戶端和依賴項(xiàng)產(chǎn)生級(jí)聯(lián)效應(yīng)。事先了解它們可以讓我們?cè)O(shè)計(jì)一個(gè)更強(qiáng)大的系統(tǒng),也可以簡(jiǎn)化我們的故障排除過(guò)程。

?前言

雖然緩存被認(rèn)為是軟件系統(tǒng)的性能助推器,但如果處理不當(dāng),它也容易出現(xiàn)錯(cuò)誤。 在本文中,我將介紹 3 個(gè)有時(shí)可能會(huì)造成災(zāi)難性后果的常見(jiàn)緩存問(wèn)題,希望大家在架構(gòu)上引入緩存時(shí),需要考慮到。

緩存擊穿

圖片

緩存故障 當(dāng)緩存鍵過(guò)期時(shí)會(huì)發(fā)生緩存故障,并且多個(gè)請(qǐng)求同時(shí)訪問(wèn)數(shù)據(jù)庫(kù)以查找相同的鍵。 讓我們來(lái)看看它是如何工作的:

  • 熱緩存鍵過(guò)期。
  • 多個(gè)并發(fā)請(qǐng)求進(jìn)來(lái)搜索同一個(gè)鍵。
  • 服務(wù)器向數(shù)據(jù)庫(kù)發(fā)起多個(gè)并發(fā)請(qǐng)求以查找相同的鍵。

緩存擊穿會(huì)顯著增加數(shù)據(jù)庫(kù)的負(fù)載,尤其是當(dāng)許多熱鍵同時(shí)過(guò)期時(shí)。 下面是解決這個(gè)問(wèn)題的2種解決方案:

  • 獲取搜索到的key的分布式鎖,當(dāng)一個(gè)線程試圖更新緩存時(shí),其他線程需要等待。
  • 利用Refresh-ahead 策略異步刷新熱數(shù)據(jù),使熱鍵永不過(guò)期。

緩存穿透

圖片

緩存穿透 當(dāng)搜索到的key?既不在緩存中, 也不在數(shù)據(jù)庫(kù)中時(shí),就會(huì)發(fā)生**緩存穿透,**連數(shù)據(jù)庫(kù)都穿透過(guò)去了。 讓我們來(lái)看看它是如何工作的,當(dāng)key既不在緩存中也不在數(shù)據(jù)庫(kù)中時(shí),就會(huì)發(fā)生這種情況。

  • 當(dāng)用戶查詢key時(shí),應(yīng)用程序由于緩存未命中而去查詢數(shù)據(jù)庫(kù)數(shù)據(jù)庫(kù)。
  • 由于數(shù)據(jù)庫(kù)不包含該key并返回空結(jié)果,因此該key也不會(huì)被緩存。
  • 因此,每個(gè)查詢最終都會(huì)導(dǎo)致緩存未命中,而命中數(shù)據(jù)庫(kù),直接進(jìn)行查庫(kù)。

雖然乍一看這似乎微不足道,但攻擊者可以通過(guò)使用此類密鑰啟動(dòng)大量搜索來(lái)嘗試破壞你的數(shù)據(jù)庫(kù)。 為了解決這個(gè)問(wèn)題,我們可以:

  • 緩存過(guò)期時(shí)間較短的空結(jié)果。
  • 使用布隆過(guò)濾器。在查詢數(shù)據(jù)庫(kù)之前,應(yīng)用程序在布隆過(guò)濾器中查找key,如果key不存在則立即返回。

緩存雪崩

圖片

當(dāng)對(duì)數(shù)據(jù)庫(kù)的請(qǐng)求突然激增時(shí),就會(huì)發(fā)生緩存雪崩。 這發(fā)生在:

  • 許多緩存數(shù)據(jù)同時(shí)過(guò)期。
  • 緩存服務(wù)宕機(jī),所有請(qǐng)求都直接訪問(wèn)數(shù)據(jù)庫(kù)。

數(shù)據(jù)庫(kù)流量的突然激增可能會(huì)導(dǎo)致級(jí)聯(lián)效應(yīng),并可能最終導(dǎo)致您的服務(wù)崩潰。 下面是一些常見(jiàn)的解決方案:

  • 調(diào)整緩存鍵的過(guò)期時(shí)間,使它們不會(huì)同時(shí)過(guò)期。
  • 使用Refresh-ahead 策略異步刷新熱數(shù)據(jù),使其永不過(guò)期。
  • 使用緩存集群來(lái)避免單點(diǎn)故障。當(dāng)主節(jié)點(diǎn)崩潰時(shí),其中一個(gè)副本被提升為新的主節(jié)點(diǎn)。

總結(jié)

雖然這些緩存問(wèn)題起初看起來(lái)微不足道,但有時(shí)可能會(huì)對(duì)我們的下游客戶端和依賴項(xiàng)產(chǎn)生級(jí)聯(lián)效應(yīng)。事先了解它們可以讓我們?cè)O(shè)計(jì)一個(gè)更強(qiáng)大的系統(tǒng),也可以簡(jiǎn)化我們的故障排除過(guò)程。

責(zé)任編輯:武曉燕 來(lái)源: JAVA旭陽(yáng)
相關(guān)推薦

2013-01-28 10:25:46

開(kāi)發(fā)人員設(shè)計(jì)技巧

2024-06-04 14:31:16

2024-10-21 13:15:03

2021-02-05 12:58:18

開(kāi)發(fā)人員CICD

2024-06-03 10:35:41

2023-07-11 16:45:32

VS Code開(kāi)發(fā)技巧

2023-03-08 15:13:32

Git工具開(kāi)發(fā)

2023-10-26 16:56:24

2020-10-13 18:20:55

TCPHTTP網(wǎng)絡(luò)協(xié)議

2019-11-25 14:09:34

控制臺(tái)命令開(kāi)發(fā)

2020-01-27 16:28:57

開(kāi)發(fā)命令遠(yuǎn)程服務(wù)器

2020-09-22 12:19:25

JavaGithub倉(cāng)庫(kù)

2023-01-12 08:33:06

2022-05-09 07:40:16

WebCSS前端

2024-10-28 16:06:50

2022-02-21 00:11:24

Java工具開(kāi)發(fā)

2022-10-13 15:19:33

JavaScript開(kāi)發(fā)編程語(yǔ)言

2022-12-16 08:14:00

2022-04-27 08:01:44

JavaThreadRunnable

2024-01-24 08:00:00

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)