1. 程式人生 > >redis單執行緒模型分析

redis單執行緒模型分析

redis原理

redis採用自己實現的事件分離器,效率比較高,內部採用非阻塞的執行方式,吞吐能力比較大。

不過,因為一般的記憶體操作都是簡單存取操作,執行緒佔用時間相對較短,主要問題在io上,因此,redis這種模型是合適的,但是如果某一個執行緒出現問題導致執行緒佔用很長時間,那麼reids的單執行緒模型效率可想而知.

引自網路:

總體來說快速的原因如下: 
1)絕大部分請求是純粹的記憶體操作(非常快速) 
2)採用單執行緒,避免了不必要的上下文切換和競爭條件 
3)非阻塞IO 
內部實現採用epoll,採用了epoll+自己實現的簡單的事件框架。epoll中的讀、寫、關閉、連線都轉化成了事件,然後利用epoll的多路複用特性,絕不在io上浪費一點時間 

這3個條件不是相互獨立的,特別是第一條,如果請求都是耗時的,採用單執行緒吞吐量及效能可想而知了。應該說redis為特殊的場景選擇了合適的技術方案。

 關於執行緒安全問題

redis實際上是採用了執行緒封閉的觀念,把任務封閉在一個執行緒,自然避免了執行緒安全問題,不過對於需要依賴多個redis操作的複合操作來說,依然需要鎖,而且有可能是分散式鎖