redis單執行緒還是多執行緒

2021-10-06 15:04:40 字數 882 閱讀 6230

redis 是單執行緒模型,指的是執行 redis 命令的核心模組是單執行緒的,而不是整個 redis 例項就乙個執行緒,redis 其他模組還有各自模組的執行緒的。

redis基於reactor模式開發了網路事件處理器,這個處理器被稱為檔案事件處理器。它的組成結構為4部分:多個套接字、io多路復用程式、檔案事件分派器、事件處理器。因為檔案事件分派器佇列的消費是單執行緒的,所以redis才叫單執行緒模型。

一般來說 redis 的瓶頸並不在 cpu,而在記憶體和網路。如果要使用 cpu 多核,可以搭建多個 redis 例項來解決。

redis 4.0 開始就有多執行緒的概念了,比如 redis 通過多執行緒方式在後台刪除物件、以及通過 redis 模組實現的阻塞命令等。

redis 6.0 之後的版本拋棄了單執行緒模型這一設計,原本使用單執行緒執行的 redis 也開始選擇性使用多執行緒模型

因為讀寫網路的read/write系統呼叫在redis執行期間占用了大部分cpu時間,如果把網路讀寫做成多執行緒的方式對效能會有很大提公升。

redis 的多執行緒部分只是用來處理網路資料的讀寫和協議解析,執行命令仍然是單執行緒。之所以這麼設計是不想 redis 因為多執行緒而變得複雜,需要去控制 key、lua、事務,lpush/lpop 等等的併發問題。

redis 在最新的幾個版本中加入了一些可以被其他執行緒非同步處理的刪除操作(unlink、flushall async 和 flushdb async)

redis可以使用del命令刪除乙個元素,如果這個元素非常大,可能佔據了幾十兆或者是幾百兆,那麼在短時間內是不能完成的,這樣一來就需要多執行緒的非同步支援。現在刪除工作可以在後台進行。

redis在4.0之前使用單執行緒是因為基於記憶體速度快,而且多路復用有多路復用的作用,足以支援正常使用。之所以引入多執行緒是因為要在某些操作要優化(刪除操作等)。

Redis是多執行緒還是單執行緒?

沒錯,大家所熟知的 redis 確實是單執行緒模型,指的是執行 redis 命令的核心模組是單執行緒的,而不是整個 redis 例項就乙個執行緒,redis 其他模組還有各自模組的執行緒的。下面這個解釋比較好 一般來說 redis 的瓶頸並不在 cpu,而在記憶體和網路。如果要使用 cpu 多核,可...

Redis是單執行緒還是多執行緒

準確一點來講,既不是單執行緒,也不是多執行緒。io執行緒 記憶體處理執行緒 服務端和客戶端建立 socket 連線,並分配處理執行緒 首先,主線程負責接收建立連線請求。當有客戶端請求和例項建立 socket 連線時,主線程會建立和客戶端的連線,並把 socket 放入全域性等待佇列中。緊接著,主線程...

Redis 到底是單執行緒還是多執行緒?

相對於多執行緒而言,可以說 redis 是單執行緒,但是這種說法也是不太準確的。為什麼呢?下面來分析一下 一 redis 單執行緒到底指什麼?沒錯,大家所熟知的 redis 確實是單執行緒模型,指的是執行 redis 命令的核心模組是單執行緒的,而不是整個 redis 例項就是乙個執行緒,redis...