Redis為什麼是單執行緒還支援高併發

2022-03-09 07:21:46 字數 799 閱讀 2199

redis為什麼設計成單執行緒模式

因為redis是基於記憶體的讀寫操作,所以cpu不是效能瓶頸,而單執行緒更好實現,所以就設計成單執行緒模式

單執行緒模式省卻了cpu上下文切換帶來的開銷問題,也不用去考慮各種鎖的問題,不存在加鎖釋放鎖操作,沒有因為可能出現死鎖而導致的效能消耗。

單執行緒為什麼快

完全基於記憶體的操作。

redis特有的資料結構,對儲存資料做了優化,使訪問更加簡單高效

多路io復用

多路io復用:這裡「多路」指的是多個網路連線,「復用」指的是復用同乙個執行緒。採用多路 i/o 復用技術可以讓單個執行緒高效的處理多個連線請求(儘量減少網路io的時間消耗);

redis雖然是單執行緒的,但是可以處理併發連線。非阻塞io 內部實現採用epoll,採用了epoll+自己實現的簡單的事件框架。epoll中的讀、寫、關閉、連線都轉化成了事件,然後利用epoll的多路復用特性,使併發稱為可能。

單執行緒為什麼快還支援高併發

基於以上所有redis有以下幾個優勢:

完全基於記憶體操作,加上其特有的資料結構(優化的資料結構)使得其訪問速度非常快。

單執行緒模式單省卻了cpu上下文切換帶來的開銷問題,也不用去考慮各種鎖的問題,不存在加鎖釋放鎖操作,沒有因為可能出現死鎖而導致的效能消耗。

多路io復用,使其可以可以高效的處理多個連線請求,既支援了高併發,同時也減少了網路io的消耗時間。

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

單執行緒的劣勢及解決方案

無法發揮多核cpu效能,不過可以通過在單機開多個redis例項來完善;

Redis為什麼是單執行緒還這麼快

1 redis是基於記憶體的操作,cpu不是redis的瓶頸,redis的瓶頸最有可能是機器記憶體的大小或者網路頻寬 2 採用單執行緒,避免了不必要的上下文切換和競爭條件,也不存在多程序或者多執行緒導致的切換而消耗 cpu 3 採用網路io多路復用技術來保證在多連線的時候,系統的高吞吐量。多路 指的...

Redis為什麼是單執行緒

經過多方資料收集 總結 思考,結論如下 準確地來說,該問題是 為什麼redis採用單程序單執行緒模型 我們從兩個層次去理解 第乙個層次 我們多執行緒的使用情景是io密集型,目的是為了充分利用cpu資源。也就是說當乙個執行緒io等待的時候,另乙個執行緒可以進行執行,達到充分利用cpu資源的效果,不要讓...

Redis為什麼是單執行緒的還這麼快

1 完全基於記憶體,絕大部分請求是純粹的記憶體操作,非常快速。資料存在記憶體中,類似於hashmap,hashmap的優勢就是查詢和操作的時間複雜度都是o 1 2 資料結構簡單,對資料操作也簡單,redis中的資料結構是專門進行設計的 3 採用單執行緒,避免了不必要的上下文切換和競爭條件,也不存在多...