單線程架構(gòu)
Redis使用了單線程架構(gòu)和I/O多路復(fù)用模型來實(shí)現(xiàn)高性能的內(nèi)存數(shù)據(jù)庫.
為什么單線程還能這么快?
純內(nèi)存訪問径簿,Redis將所有數(shù)據(jù)放在內(nèi)存中仔戈,內(nèi)存的響應(yīng)時(shí)長大約為100納秒.
第二吓蘑,非阻塞I/O哪轿,Redis使用epoll作為I/O多路復(fù)用技術(shù)的實(shí)現(xiàn)淳蔼,再加上Redis自身的事件處理模型將epoll中的連接、讀寫奸柬、關(guān)閉都轉(zhuǎn)換為事件,不在網(wǎng)絡(luò)I/O上浪費(fèi)過多的時(shí)間.
關(guān)于非阻塞I/O epoll 可以看這篇文章,對(duì)深入了解redis很重要:
3.單線程避免了線程切換和競態(tài)產(chǎn)生的消耗婴程。
單線程可以簡化數(shù)據(jù)結(jié)構(gòu)和算法的實(shí)現(xiàn),并發(fā)數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)不但困難而且開發(fā)測試比較麻煩.
單線程避免了線程切換和競態(tài)產(chǎn)生的消耗廓奕,對(duì)于服務(wù)端開發(fā)來說,鎖和線程切換通常是性能殺手档叔。
但是單線程會(huì)有一個(gè)問題:對(duì)于每個(gè)命令的執(zhí)行時(shí)間是有要求的桌粉。如果某個(gè)命令執(zhí)行過長,會(huì)造成其他命令的塞衙四,對(duì)于Redis這種高性能的服務(wù)來說是致命的铃肯,所以Redis是面向快速執(zhí)行場景的數(shù)據(jù)庫.
來自《Redis運(yùn)維與開發(fā)》