全國(guó)咨詢(xún)/投訴熱線(xiàn):400-618-4000

首頁(yè)技術(shù)文章正文

Redis單進(jìn)程單線(xiàn)程有哪些弊端?

更新時(shí)間:2023-10-30 來(lái)源:黑馬程序員 瀏覽量:

單線(xiàn)程的 Redis 雖然性能很高,但是卻有兩個(gè)問(wèn)題。一個(gè)問(wèn)題是沒(méi)有辦法充分發(fā)揮現(xiàn)代 CPU 的多核處理能力,一個(gè)實(shí)例只能使用一個(gè)核的能力。二是如果某個(gè)用戶(hù)請(qǐng)求的處理過(guò)程卡住一段時(shí)間,會(huì)導(dǎo)致其它所有的請(qǐng)求都會(huì)出現(xiàn)超時(shí)的情況。所以,在線(xiàn)上的 redis 使用過(guò)程時(shí)是明確禁止使用 keys  等長(zhǎng)耗時(shí)的操作的。關(guān)于Redis高并發(fā)總結(jié)如下:

· Redis 是純內(nèi)存數(shù)據(jù)庫(kù),一般都是簡(jiǎn)單的存取操作,線(xiàn)程占用的時(shí)間很多,時(shí)間的花費(fèi)主要集中在 IO 上,所以讀取速度快。

· 再說(shuō)一下 IO,Redis 使用的是非阻塞 IO,IO 多路復(fù)用,使用了單線(xiàn)程來(lái)輪詢(xún)描述符,將數(shù)據(jù)庫(kù)的開(kāi)、關(guān)、讀、寫(xiě)都轉(zhuǎn)換成了事件,減少了線(xiàn)程切換時(shí)上下文的切換和競(jìng)爭(zhēng)。

· Redis 采用了單線(xiàn)程的模型,保證了每個(gè)操作的原子性,也減少了線(xiàn)程的上下文切換和競(jìng)爭(zhēng)。

· 另外,數(shù)據(jù)結(jié)構(gòu)也幫了不少忙,Redis 全程使用 hash 結(jié)構(gòu),讀取速度快,還有一些特殊的數(shù)據(jù)結(jié)構(gòu),對(duì)數(shù)據(jù)存儲(chǔ)進(jìn)行了優(yōu)化,如壓縮表,對(duì)短數(shù)據(jù)進(jìn)行壓縮存儲(chǔ),再如,跳表,使用有序的數(shù)據(jù)結(jié)構(gòu)加快讀取的速度。

· 還有一點(diǎn),Redis 采用自己實(shí)現(xiàn)的事件分離器,效率比較高,內(nèi)部采用非阻塞的執(zhí)行方式,吞吐能力比較大。

分享到:
在線(xiàn)咨詢(xún) 我要報(bào)名
和我們?cè)诰€(xiàn)交談!