教育行業(yè)A股IPO第一股(股票代碼 003032)

全國(guó)咨詢/投訴熱線:400-618-4000

Redis有什么優(yōu)缺點(diǎn)?

更新時(shí)間:2021年04月30日16時(shí)42分 來(lái)源:傳智教育 瀏覽次數(shù):

好口碑IT培訓(xùn)

Redis的優(yōu)點(diǎn)

1.純內(nèi)存操作。

2.單線程操作,避免了頻繁的上下文切換。

3.采用了非阻塞I/O多路復(fù)用機(jī)制。

I/O多路復(fù)用機(jī)制:I/O多路復(fù)用就是只有單個(gè)線程,通過(guò)跟蹤每個(gè)I/O流的狀態(tài),來(lái)管理多個(gè)I/O流。


Redis的缺點(diǎn)

緩存和數(shù)據(jù)庫(kù)雙寫一致性問(wèn)題

一致性的問(wèn)題很常見(jiàn),因?yàn)榧尤肓司彺嬷?,?qǐng)求是先從Redis 中查詢,如果Redis 中存在數(shù)據(jù)就不會(huì)走數(shù)據(jù)庫(kù)了,如果不能保證緩存跟數(shù)據(jù)庫(kù)的一致性就會(huì)導(dǎo)致請(qǐng)求獲取到的數(shù)據(jù)不是最新的數(shù)據(jù)。

解決方案:

1、編寫刪除緩存的接口,在更新數(shù)據(jù)庫(kù)的同時(shí),調(diào)用刪除緩存的接口刪除緩存中的數(shù)據(jù)。這么做會(huì)有耦合高以及調(diào)用接口失敗的情況。

2、消息隊(duì)列:ActiveMQ,消息通知。

緩存的并發(fā)競(jìng)爭(zhēng)問(wèn)題

并發(fā)競(jìng)爭(zhēng),指的是同時(shí)有多個(gè)子系統(tǒng)去set 同一個(gè)key值。

解決方案:最簡(jiǎn)單的方式就是準(zhǔn)備一個(gè)分布式鎖,大家去搶鎖,搶到鎖就做set操作即可。

緩存雪崩問(wèn)題

緩存雪崩,即緩存同一時(shí)間大面積的失效,這個(gè)時(shí)候又來(lái)了一波請(qǐng)求,結(jié)果請(qǐng)求都懟到數(shù)據(jù)庫(kù)上,從而導(dǎo)致數(shù)據(jù)庫(kù)連接異常。

解決方案:

1.給緩存的失效時(shí)間,加上一個(gè)隨機(jī)值,避免集體失效。

2.使用互斥鎖,但是該方案吞吐量明顯下降了。

3.搭建Redis 集群。

緩存擊穿問(wèn)題

緩存穿透,即黑客故意去請(qǐng)求緩存中不存在的數(shù)據(jù),導(dǎo)致所有的請(qǐng)求都懟到數(shù)據(jù)庫(kù)上,從而數(shù)據(jù)庫(kù)連接異常。

解決方案:

1、利用互斥鎖,緩存失效的時(shí)候,先去獲得鎖,得到鎖了,再去請(qǐng)求數(shù)據(jù)庫(kù)。沒(méi)得到鎖,則休眠一段時(shí)間重試。

2、采用異步更新策略,無(wú)論key 是否取到值,都直接返回,value 值中維護(hù)一個(gè)緩存失效時(shí)間,緩存如果過(guò)期,異步起一個(gè)線程去讀數(shù)據(jù)庫(kù),更新緩存。



猜你喜歡:

Redis適合在哪些場(chǎng)景使用?

Redis所有數(shù)據(jù)放到內(nèi)存中的原因是什么?

Redis如何實(shí)現(xiàn)分布式阻塞隊(duì)列?

Redis有哪幾種數(shù)據(jù)淘汰策略?

傳智教育高級(jí)Java培訓(xùn)課程

0 分享到:
和我們?cè)诰€交談!