數據存儲在內存中,讀取的時候不須要進行磁盤的 IOsegmentfault
單線程保證了系統沒有線程的上下文切換緩存
使用單線程,能夠避免沒必要要的上下文切換和競爭條件,沒有多進程或多線程引發的切換和 CPU 的消耗,沒必要考慮各類鎖的問題,沒有鎖釋放或鎖定操做,不會因死鎖而下降性能;網絡
Redis 是用 C 語言開發完成的數據結構
採用多路 I/O 複用技術可讓單個線程高效的處理多個網絡鏈接請求(儘可能減小網絡 IO 的時間消耗)多線程
非阻塞 IO 內部實現採用 epoll,採用了 epoll+本身實現的簡單的事件框架。epoll 中的讀、寫、關閉、鏈接都轉化成了事件,而後利用 epoll 的多路複用特性,毫不在 io 上浪費一點時間。框架
數據結構簡單,對數據操做也簡單,Redis 中的數據結構是專門進行設計的;分佈式
多路 I/O 複用模型是利用 select、poll、epoll 能夠同時監察多個流的 I/O 事件的能力,在空閒的時候,會把當前線程阻塞掉,當有一個或多個流有 I/O 事件時,就從阻塞態中喚醒,因而程序就會輪詢一遍全部的流(epoll 是隻輪詢那些真正發出了事件的流),而且只依次順序的處理就緒的流,這種作法就避免了大量的無用操做。ide
這裏「多路」指的是多個網絡鏈接,「複用」指的是複用同一個線程。性能
採用多路 I/O 複用技術可讓單個線程高效的處理多個鏈接請求(儘可能減小網絡 IO 的時間消耗),且 Redis 在內存中操做數據的速度很是快,也就是說內存內的操做不會成爲影響 Redis 性能的瓶頸,主要由以上幾點造就了 Redis 具備很高的吞吐量。優化
視頻 | IO 多路複用 select/poll/epoll 介紹
我的公衆號《駭客與畫家》,歡迎關注