爲什麼說Redis是單線程的以及爲什麼Redis這麼快

一、Redis爲什麼這麼快

Redis是一個基於內存的採用單進程單線程模型的key-value數據庫,由c語言編寫,官方提供的數據是可以達到100000+QPS。爲什麼能這麼快,主要有以下幾點:

  • 完全基於內存,絕大多數請求都是純粹的內存操作,非常快速。數據存儲在內存中相當於HashMap,查找和操作時間複雜度都是O(1)。
  • 採用單線程,避免了不必要的競爭和上下文切換,也不存在多線程或多進程導致的切換而消耗CPU。因爲是單線程的,也不需要去考慮鎖的問題,不存在加鎖或釋放鎖操作。
  • 使用多路IO複用模型,非阻塞IO。(epoll)
  • 數據結構簡單,對數據操作也簡單,Redis中的數據結構時專門進行設計的

二、多路IO複用模型

多路IO複用模型是利用select、poll、epoll可以同時監察多個流的IO事件的能力。在空閒的時候會把當前線程阻塞掉,當一個或多個流中有IO事件時,就把當前線程從阻塞態喚醒。於是程序就會輪詢一遍所有的流,並以此處理就緒的流,這種做法避免了大量無用操作。

這裏的多路是指多個網絡連接,複用指的是複用一個或多個線程。採用多路複用可以讓單個線程高效的處理多個連接請求(儘量減少網絡IO的時間消耗)。且Redis在內存中操作數據的速度非常快,內存不會成爲影響Redis性能的瓶頸,主要由以上幾點造就了Redis具有很高的吞吐量。

三、爲什麼Redis是單線程的

Redis是基於內存的操作,CPU不是Redis的瓶頸(一個CPU就夠用了),Redis的瓶頸最有可能是機器內存的大小或者網絡帶寬。既然單線程容易實現,而且CPU不會成爲瓶頸,那就順理成章的採用單線程方案了。(我們一直在強調單線程,只是在處理網絡請求的時候只有一個線程來處理,一個正式的Redis Server運行時肯定不是單線程的)。

文章參考:https://blog.csdn.net/xlgen157387/article/details/79470556

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章