国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

緩存的三個(gè)問題

AlphaGooo / 1302人閱讀

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

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

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

緩存命中率過低

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

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

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

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

特例一:分散攻擊

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

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

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

特例二:無效的 key

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

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

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

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

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

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

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

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

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/62093.html

相關(guān)文章

  • 緩存三個(gè)問題

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

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

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

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

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

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

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

    qc1iu 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<