成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

緩存的三個(gè)問(wèn)題

Astrian / 3591人閱讀

摘要:緩存命中率過(guò)低緩存命中率指的是從緩存中找到數(shù)據(jù)的請(qǐng)求占所有請(qǐng)求的比重。因此之所以出現(xiàn)緩存命中率過(guò)低,自然就是因?yàn)闊狳c(diǎn)不夠熱,請(qǐng)求的數(shù)據(jù)非常分散。要緩解緩存命中率過(guò)低的問(wèn)題,最直接的辦法當(dāng)然是加大緩存。

緩存的作用是在內(nèi)存中臨時(shí)存儲(chǔ)來(lái)自外部系統(tǒng)(如數(shù)據(jù)庫(kù))的數(shù)據(jù),以便讓請(qǐng)求更快的得到響應(yīng)。如果請(qǐng)求數(shù)據(jù)在緩存中不存在,或者已經(jīng)超時(shí)失效,那么也要從外部系統(tǒng)查詢,然后放入緩存中,這個(gè)過(guò)程叫刷新緩存。

這是緩存的基本使用邏輯,但是實(shí)際當(dāng)中可能出現(xiàn)三種異常情況,它們會(huì)導(dǎo)致緩存起不到預(yù)期的使用效果,以至于系統(tǒng)性能明顯下降。

緩存命中率過(guò)低

緩存命中率指的是從緩存中找到數(shù)據(jù)的請(qǐng)求占所有請(qǐng)求的比重。例如 100 個(gè)請(qǐng)求當(dāng)中有 90 個(gè)請(qǐng)求的結(jié)果可以直接從緩存中獲得,那么命中率就是 90%。剩下 10% 的請(qǐng)求就要從外部系統(tǒng)查詢數(shù)據(jù),填入緩存,然后再返回。

什么情況下緩存命中率高呢?請(qǐng)求的數(shù)據(jù)比較集中的時(shí)候,例如 80% 的請(qǐng)求集中在 20% 的數(shù)據(jù)上,這部分?jǐn)?shù)據(jù)也被稱作熱點(diǎn)之類的。熱點(diǎn)越熱,緩存命中率越高。

因此之所以出現(xiàn)緩存命中率過(guò)低,自然就是因?yàn)闊狳c(diǎn)不夠熱,請(qǐng)求的數(shù)據(jù)非常分散。命中率過(guò)低的后果就是很多請(qǐng)求的數(shù)據(jù)仍需從外部系統(tǒng)查詢,假如是數(shù)據(jù)庫(kù)的話,數(shù)據(jù)庫(kù)的壓力就會(huì)非常大,同時(shí)系統(tǒng)的響應(yīng)也明顯變慢。

要緩解緩存命中率過(guò)低的問(wèn)題,最直接的辦法當(dāng)然是加大緩存。本地緩存不夠,就用分布式緩存,多臺(tái)機(jī)器分開(kāi)存儲(chǔ)。

特例一:分散攻擊

有時(shí)候系統(tǒng)正常情況下是存在熱點(diǎn)數(shù)據(jù)的,但突然有一天出現(xiàn)大量的分散請(qǐng)求,導(dǎo)致緩存命中率直線下降。這些異常的請(qǐng)求可以看作是有意的攻擊行為,目的就是讓系統(tǒng)無(wú)法響應(yīng)。

而遇到攻擊行為的話,加大緩存可能是徒勞的,這時(shí)候需要去識(shí)別請(qǐng)求,對(duì)于被歸類為攻擊的請(qǐng)求主動(dòng)延長(zhǎng)響應(yīng)時(shí)間,甚至拒絕返回結(jié)果。

比如說(shuō)一個(gè)論壇,突然遇到大量請(qǐng)求,均勻的訪問(wèn)五年內(nèi)的帖子內(nèi)容,導(dǎo)致數(shù)據(jù)庫(kù)負(fù)載很大,此時(shí)可以將訪問(wèn)老帖子的請(qǐng)求(帖子ID通常是遞增的,ID越小表示發(fā)帖時(shí)間越久)返回時(shí)間適當(dāng)延長(zhǎng),比如延長(zhǎng)到五分鐘。不過(guò)使用這種做法時(shí)千萬(wàn)不要簡(jiǎn)單的暫停線程,這會(huì)導(dǎo)致沒(méi)有多余的線程來(lái)處理正常的請(qǐng)求。

特例二:無(wú)效的 key

有時(shí)候系統(tǒng)收到大量請(qǐng)求,這些請(qǐng)求的數(shù)據(jù)非但緩存中沒(méi)有,連數(shù)據(jù)庫(kù)也沒(méi)有,那么每個(gè)請(qǐng)求不但因?yàn)榫彺嫖疵卸ゲ樵償?shù)據(jù)庫(kù),而且因?yàn)閿?shù)據(jù)庫(kù)沒(méi)有記錄而無(wú)法填充到緩存。這是更加惡劣的情況。

遇到這種情況,同樣需要鑒別無(wú)效的請(qǐng)求。對(duì)于 key 自增的情況,可以通過(guò)值范圍來(lái)鑒別;而對(duì)于使用 UUID 的情況,就需要低成本的鑒別方式,布隆過(guò)濾器是一個(gè)選擇。

大量緩存項(xiàng)同時(shí)刷新

緩存通常都是存在失效時(shí)間的,需要避免的一種情況就是大量緩存項(xiàng)在同一個(gè)時(shí)間點(diǎn)失效,如果此時(shí)對(duì)這些數(shù)據(jù)的請(qǐng)求量大,那么這些請(qǐng)求就會(huì)同時(shí)去刷新各自的緩存,這就將壓力傳遞到了外部系統(tǒng)上。避免這種情況的辦法就是在預(yù)定的失效時(shí)間基礎(chǔ)上加上一個(gè)隨機(jī)值,以錯(cuò)開(kāi)緩存項(xiàng)的失效時(shí)間。

大量請(qǐng)求刷新同一個(gè)緩存項(xiàng)

一個(gè)請(qǐng)求遇到緩存失效,于是去刷新緩存,而在這個(gè)過(guò)程中又有大量請(qǐng)求來(lái)訪問(wèn)正在刷新的緩存項(xiàng),導(dǎo)致該緩存項(xiàng)完成本次刷新后,又立刻被另一個(gè)線程刷新,實(shí)質(zhì)上每個(gè)請(qǐng)求都因?yàn)榫彺嫖疵卸ピL問(wèn)了外部系統(tǒng)。

出現(xiàn)這個(gè)現(xiàn)象的原因是設(shè)計(jì)上的不合理。當(dāng)一個(gè)緩存正在刷新時(shí),訪問(wèn)該緩存項(xiàng)的其他線程應(yīng)該等待刷新完畢,這樣它們就可以直接從緩存獲得結(jié)果了。線程同步當(dāng)然是用鎖。如果是分布式系統(tǒng),那就用分布式鎖。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/17970.html

相關(guān)文章

  • 緩存三個(gè)問(wèn)題

    摘要:緩存命中率過(guò)低緩存命中率指的是從緩存中找到數(shù)據(jù)的請(qǐng)求占所有請(qǐng)求的比重。因此之所以出現(xiàn)緩存命中率過(guò)低,自然就是因?yàn)闊狳c(diǎn)不夠熱,請(qǐng)求的數(shù)據(jù)非常分散。要緩解緩存命中率過(guò)低的問(wèn)題,最直接的辦法當(dāng)然是加大緩存。 緩存的作用是在內(nèi)存中臨時(shí)存儲(chǔ)來(lái)自外部系統(tǒng)(如數(shù)據(jù)庫(kù))的數(shù)據(jù),以便讓請(qǐng)求更快的得到響應(yīng)。如果請(qǐng)求數(shù)據(jù)在緩存中不存在,或者已經(jīng)超時(shí)失效,那么也要從外部系統(tǒng)查詢,然后放入緩存中,這個(gè)過(guò)程叫刷新...

    AlphaGooo 評(píng)論0 收藏0
  • 緩存穿透、并發(fā)和失效、同步中斷,最佳實(shí)踐及優(yōu)化方案

    摘要:當(dāng)緩存空間滿了,同步失敗,網(wǎng)絡(luò)阻塞,緩存寫失敗等原因,會(huì)出現(xiàn)緩存服務(wù)器上并沒(méi)有這個(gè)。這種問(wèn)題,以前有過(guò)實(shí)踐,修改數(shù)據(jù)庫(kù)成功,而修改緩存失敗的情況,最主要就是緩存服務(wù)器掛了。而緩存服務(wù)器掛了,請(qǐng)求首先自然也就無(wú)法到達(dá),從而直接訪問(wèn)到數(shù)據(jù)庫(kù)。 原文摘自: 緩存穿透、并發(fā)和失效,來(lái)自一線架構(gòu)師的解決方案https://community.qingcloud.com/topic/463 在我們...

    funnyZhang 評(píng)論0 收藏0
  • 緩存穿透、并發(fā)和失效、同步中斷,最佳實(shí)踐及優(yōu)化方案

    摘要:當(dāng)緩存空間滿了,同步失敗,網(wǎng)絡(luò)阻塞,緩存寫失敗等原因,會(huì)出現(xiàn)緩存服務(wù)器上并沒(méi)有這個(gè)。這種問(wèn)題,以前有過(guò)實(shí)踐,修改數(shù)據(jù)庫(kù)成功,而修改緩存失敗的情況,最主要就是緩存服務(wù)器掛了。而緩存服務(wù)器掛了,請(qǐng)求首先自然也就無(wú)法到達(dá),從而直接訪問(wèn)到數(shù)據(jù)庫(kù)。 原文摘自: 緩存穿透、并發(fā)和失效,來(lái)自一線架構(gòu)師的解決方案https://community.qingcloud.com/topic/463 在我們...

    Blackjun 評(píng)論0 收藏0
  • 緩存穿透、并發(fā)和失效、同步中斷,最佳實(shí)踐及優(yōu)化方案

    摘要:當(dāng)緩存空間滿了,同步失敗,網(wǎng)絡(luò)阻塞,緩存寫失敗等原因,會(huì)出現(xiàn)緩存服務(wù)器上并沒(méi)有這個(gè)。這種問(wèn)題,以前有過(guò)實(shí)踐,修改數(shù)據(jù)庫(kù)成功,而修改緩存失敗的情況,最主要就是緩存服務(wù)器掛了。而緩存服務(wù)器掛了,請(qǐng)求首先自然也就無(wú)法到達(dá),從而直接訪問(wèn)到數(shù)據(jù)庫(kù)。 原文摘自: 緩存穿透、并發(fā)和失效,來(lái)自一線架構(gòu)師的解決方案https://community.qingcloud.com/topic/463 在我們...

    qc1iu 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<