Redis為什么這么快
1爽篷、完全基于內(nèi)存悴晰,絕大部分請(qǐng)求是純粹的內(nèi)存操作,非持鸸ぃ快速铡溪。
2、采用單線程泪喊,避免了不必要的上下文切換和競(jìng)爭(zhēng)條件棕硫,也不存在多進(jìn)程或者多線程導(dǎo)致的切換而消耗 CPU;
3袒啼、使用多路I/O復(fù)用模型哈扮,非阻塞IO;
4蚓再、使用底層模型不同滑肉,它們之間底層實(shí)現(xiàn)方式以及與客戶端之間通信的應(yīng)用協(xié)議不一樣,Redis直接自己構(gòu)建了VM 機(jī)制 摘仅,因?yàn)橐话愕南到y(tǒng)調(diào)用系統(tǒng)函數(shù)的話靶庙,會(huì)浪費(fèi)一定的時(shí)間去移動(dòng)和請(qǐng)求;
多路 I/O 復(fù)用模型
多路I/O復(fù)用模型是利用 select娃属、poll六荒、epoll 可以同時(shí)監(jiān)察多個(gè)流的 I/O 事件的能力,在空閑的時(shí)候矾端,會(huì)把當(dāng)前線程阻塞掉掏击,當(dāng)有一個(gè)或多個(gè)流有 I/O 事件時(shí),就從阻塞態(tài)中喚醒秩铆,于是程序就會(huì)輪詢一遍所有的流(epoll 是只輪詢那些真正發(fā)出了事件的流)铐料,并且只依次順序的處理就緒的流,這種做法就避免了大量的無(wú)用操作豺旬。這里“多路”指的是多個(gè)網(wǎng)絡(luò)連接钠惩,“復(fù)用”指的是復(fù)用同一個(gè)線程。
單線程redis和多核CPU
單一線程也只能用到一個(gè)CPU核心族阅,所以可以在同一個(gè)多核的服務(wù)器中篓跛,可以啟動(dòng)多個(gè)實(shí)例,組成master-master或者master-slave的形式坦刀,耗時(shí)的讀命令可以完全在slave進(jìn)行愧沟。