Redis高效能IO模型

2021-10-24 06:47:16 字數 578 閱讀 7892

首先,要釐清乙個事實,我們通常說,redis 是單執行緒,主要是指redis 的網路 io和鍵值對讀寫是由乙個執行緒來完成的,這也是 redis 對外提供鍵值儲存服務的主要流程。但 redis 的其他功能,比如持久化、非同步刪除、集群資料同步等,其實是由額外的執行緒執行的。

所以,嚴格來說,redis 並不是單執行緒,但是我們一般把 redis 稱為單執行緒高效能,這樣顯得「酷」些。接下來,我也會把 redis 稱為單執行緒模式。而且,這也會促使你緊接著提問:「為什麼用單執行緒?為什麼單執行緒能這麼快?」

要弄明白這個問題,我們就要深入地學習下 redis 的單執行緒設計機制以及多路復用機制。以後當你在對redis 效能進行調優時,也能更有針對性地避免會導致 redis 單執行緒阻塞的操作,例如執行複雜度高的命令。

要更好地理解 redis 為什麼用單執行緒,我們就要先了解多執行緒的開銷。

日常寫程式時,我們經常會聽到一種說法:「使用多執行緒,可以增加系統吞吐率,或是可以增加系統擴充套件性。」的確,對於乙個多執行緒的系統來說,在有合理的資源分配的情況下,可以增加系統中處理請求操作的資源實體,進而提公升系統能夠同時處理的請求數,即吞吐率。下圖是我們採用多執行緒時所期待的結果。

Redis 高效能IO模型

redis核心結束與實戰 03 通常說redis 是單執行緒,主要是指 redis 的網路 io 和鍵值對讀寫是由乙個執行緒來完成的,這也是 redis 對外提供鍵值儲存服務的主要流程。但 redis 的其他功能,比如持久化 非同步刪除 集群資料同步等,其實是由額外的執行緒執行的。目錄 一 多執行緒...

Kafka如何實現高效能IO?

雖然kafka的sdk提供了單條訊息傳送,但實際上,kafka 的客戶端 sdk 在實現訊息傳送邏輯的時候,採用了非同步批量傳送的機制 當你呼叫 send 方法傳送一條訊息之後,無論你是同步傳送還是非同步傳送,kafka 都不會立即就把這條訊息傳送出去。它會先把這條訊息,存放在記憶體中快取起來,然後...

Kafka如何實現高效能IO?

雖然kafka的sdk提供了單條訊息傳送,但實際上,kafka 的客戶端 sdk 在實現訊息傳送邏輯的時候,採用了非同步批量傳送的機制 當你呼叫 send 方法傳送一條訊息之後,無論你是同步傳送還是非同步傳送,kafka 都不會立即就把這條訊息傳送出去。它會先把這條訊息,存放在記憶體中快取起來,然後...