Redis是基於Reactor模式開發的網路事件處理器,這個處理器是單線程的,所 以redis是單線程的。 為什麼它是單線程還那麼快呢? 主要有以下幾個原因: 一、純記憶體操作 由於Redis是純記憶體操作,相比於磁碟來說,記憶體就快得多,這個是Redis快的主要 原因。 二、多路復用I/O機制(NIO) ...
Redis是基於Reactor模式開發的網路事件處理器,這個處理器是單線程的,所
以redis是單線程的。
為什麼它是單線程還那麼快呢?
主要有以下幾個原因:
一、純記憶體操作
由於Redis是純記憶體操作,相比於磁碟來說,記憶體就快得多,這個是Redis快的主要原因。
二、多路復用I/O機制(NIO)
Redis採用的是多路復用非阻塞IO機制,即NIO。這允許Redis同時處理多個網路
連接和I/O流,提高了吞吐量。非阻塞I/O使得Redis能夠高效地處理大量的客戶端
連接和數據讀寫操作,而不會因為過多的I/O操作導致性能下降或線程阻塞。
三、單線程避免上下文切換
單線程反而沒有了多線程上下文切換帶來的損耗,已經資源競爭帶來的複雜性。上
下文切換會消耗CPU資源並降低性能,而競爭條件可能導致數據不一致和性能下降
四、簡單的數據結構
Redis的數據結構相對簡單,這使得數據在記憶體中的訪問更加連續和一致,有利於
充分利用CPU緩存,減少緩存失效的開銷。
最後,值得註意的是Redis6.0引入了多線程。在Redis6.0之前,Redis>Redis6.0引入了多線程。在Redis6.0之前,Redis Server端處
理接受到客戶端請求時,從Socket連接建立到指令的讀取、解析、執行、寫回都
是由一個線程來處理。這種方式在客戶端請求比較多的情況下,單個線程的網路處
理效率較慢,導致客戶端的請求處理效率較低。
Redis其實主要分成兩個模塊:網路IO處理模塊和命令執行模塊。引入多線程是為
瞭解決網路I/O模塊效率問題,利用多核CPU的優勢,提升網路I/O處理性能。而
命令執行模塊還是使用單線程,從而繼續保證了命令執行的原子性。