別再誤會了!Redis 6.0 的多線程,和你想象的完全不一樣

圖片

技術解析

核心誤區:Redis 6.0是完全多線程的嗎?

No. Redis 6.0引入的多線程,只用于網絡I/O的讀寫和數據的解析。而核心的命令執行(比如?GET,?SET,?HGETALL?等)依然是單線程的

Redis的架構演進,就像是把一個復雜的任務分解成:“聽你說話 -> 思考并做事 -> 回答你”?這三個步驟。

  • ??聽你說話:接收網絡請求,解析命令。

  • ??思考并做事:執行命令。

  • ??回答你:將結果返回給客戶端。

在Redis 6.0之前,這三個步驟都由一個單線程完成。這個單線程模型在CPU計算上非常高效,但它最大的瓶頸在于“聽你說話”和“回答你”這兩個網絡I/O環節。

Redis 6.0的多線程優化,只針對**“聽你說話”和“回答你”這兩個網絡I/O環節**進行了并行化,而最核心的“思考并做事”環節依然保留了單線程。

Redis 6.0多線程的執行流程

  1. 1.?主線程 (Main Thread)

    • ??監聽連接: 負責accept()新的客戶端連接。

    • ??I/O多路復用: 負責epoll_wait等系統調用,等待網絡事件的發生。

  2. 2.?I/O線程 (Worker Threads)

    • ??處理網絡讀寫: 主線程將準備就緒的Socket(已收到數據或可寫入數據)分發給這些I/O線程。

    • ??解析請求: I/O線程負責從Socket中讀取數據,解析出命令。

    • ??發送響應: I/O線程負責將執行結果寫入Socket,發送給客戶端。

  3. 3.?主線程 (Main Thread) 再次登場

    • ??執行命令: I/O線程解析完命令后,會將命令提交給主線程。主線程仍然是唯一的命令執行者。它會將所有客戶端提交的命令,按順序、單線程地執行,保證了Redis命令的原子性和數據一致性,避免了鎖的開銷。

這個過程就像一個經典的生產者-消費者模型:I/O線程作為生產者,負責處理網絡數據包,將命令“生產”出來;主線程作為消費者,負責從隊列中取出命令并執行。

配置參數

Redis 6.0的多線程功能默認是關閉的。你可以通過以下參數來開啟和配置:

# 開啟多線程
io-threads-do-reads yes
# 設置I/O線程數量,建議設置為CPU核心數-2或-4
io-threads 4

故事場景:米其林餐廳的“主廚與服務員”模式

你(Redis)是一家米其林三星餐廳的主廚Main Thread)。你以精湛的廚藝(執行命令)聞名,但你一次只能做一道菜,并且絕不允許任何人插手你的烹飪過程(單線程執行)。

傳統模式 (Redis 6.0之前): “主廚事必躬親”

  • ??工作流程:
    你既是主廚,又是餐廳的服務員。

    1. 1.?接待顧客: 你親自到門口迎接顧客(accept連接)。

    2. 2.?聽顧客點單: 你親自聽顧客點單,并把菜單寫下來(網絡I/O讀寫)。

    3. 3.?烹飪: 你回到廚房,專心致志地做菜(執行命令)。

    4. 4.?上菜: 你親自把菜端給顧客,并收盤子(網絡I/O讀寫)。

  • ??瓶頸:
    你做菜的速度很快,但由于要花大量時間在接待、聽單、上菜這些瑣碎的體力活上,你大部分時間都耗在了餐廳大堂和顧客周旋,真正花在廚房里做菜的時間反而很少。這導致餐廳的整體效率不高。

現代模式 (Redis 6.0之后): “主廚與多位服務員”模式

為了解決這個瓶頸,你雇傭了一個專業的服務員團隊I/O Threads)。

  • ??工作流程:

    1. 1.?總指揮: 你(主廚)依然坐在廚房里,通過一個監視器(epoll),同時關注著所有餐桌(Socket)。

    2. 2.?服務員團隊: 當某個餐桌的顧客(客戶端)點完單或需要上菜時,監視器會提醒你。

    3. 3.?分派任務: 你會立刻把這個任務派給一個空閑的服務員。服務員小李去收菜單(網絡I/O讀),服務員小張去上菜(網絡I/O寫)。

    4. 4.?主廚的核心工作: 服務員團隊(I/O Threads)將收到的菜單(命令)送回廚房,你(主廚)仍然是唯一的烹飪者。你按順序、單線程地做菜,并把菜品放在“上菜口”。

    5. 5.?服務員團隊再次出動: 菜做好后,服務員團隊會再次從“上菜口”把菜端走,送到對應的餐桌。

  • ??優化效果:

    • ??主廚效率飛升: 你(主廚)從繁重的I/O雜活中徹底解脫出來,可以全身心地投入到你最擅長的烹飪(命令執行)上。

    • ??整體效率提升: 即使來了100桌客人,只要你有足夠多的服務員,他們可以并行地收單、上菜,而主廚則可以穩定、高速地處理源源不斷的菜單。

故事總結:

特性

Redis 6.0之前Redis 6.0之后
核心執行

??單線程?(主廚親自做飯)

??單線程?(主廚依然是唯一烹飪者)

網絡I/O

??單線程?(主廚兼服務員)

??多線程?(專業服務員團隊分工合作)

工作模式命令執行被I/O阻塞I/O和命令執行分離
核心比喻主廚一人包辦一切主廚專心烹飪,服務員團隊處理雜務

結論:
Redis 6.0引入多線程,并非要推翻其賴以成名的“單線程模型”。相反,它是一種精準的、有針對性的優化。通過將單線程模型中唯一的瓶頸——網絡I/O,剝離并交由多線程并行處理,使得Redis在不犧牲原子性、簡-潔性的前提下,將性能推向了新的高度。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/921236.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/921236.shtml
英文地址,請注明出處:http://en.pswp.cn/news/921236.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

23種設計模式——抽象工廠模式(Abstract Factory Pattern)詳解

?作者簡介:大家好,我是 Meteors., 向往著更加簡潔高效的代碼寫法與編程方式,持續分享Java技術內容。 🍎個人主頁:Meteors.的博客 💞當前專欄:設計模式 ?特色專欄:知識分享 &#x…

本地部署開源數據生成器項目實戰指南

本地部署開源數據生成器項目實戰指南 前言 在當今大數據和人工智能時代,高質量數據集對于模型訓練和算法開發至關重要。然而,獲取真實且合規的數據集往往面臨隱私、成本和法律等多重挑戰。合成數據生成技術為此提供了優雅的解決方案,它能夠…

2025React面試題集錦

1. React 是什么?它有哪些主要特點? React 是由Facebook開發的開源JavaScript庫,用于構建用戶界面(UI),尤其適合開發復雜的單頁應用(SPA)。 主要特點: 聲明式編程:只需描述UI應該是什么樣子(如return <div>Hello</div>),React會自動處理DOM更新,無需…

設計模式:迭代器模式(Iterator Pattern)

文章目錄一、概念二、實例分析三、示例代碼一、概念 迭代器模式 是一種 行為型設計模式&#xff0c;用于在不暴露集合對象內部結構的前提下&#xff0c;順序訪問集合中的元素。 換句話說&#xff1a; 集合類只負責數據存儲&#xff1b;迭代器類負責遍歷集合&#xff1b;使用者…

Vue 3 學習路線指南

階段一:基礎入門 (1-2周) 1.1 環境準備 # 安裝 Node.js (推薦 18+ 版本) # 安裝 Vue CLI 或使用 Vite npm create vue@latest my-vue-app cd my-vue-app npm install npm run dev1.2 Vue 3 核心概念 響應式系統:ref(), reactive(), computed() 組合式 API:setup() 函數 模…

使用 `hover:not-[:has(:hover)]` 避免「父元素和子元素同時 hover」時的樣式沖突

:hover:not-(:has(:hover)) has() CSS 4 引入的“父選擇器”&#xff0c;意思是&#xff1a;匹配那些里面包含某個子元素/狀態的元素。 例如&#xff1a;:has(:hover) 表示「自身包含正在被 hover 的子元素」。 :not() 取反偽類&#xff0c;表示不匹配里面的條件。 比如我…

第三十天-DMA串口實驗

一、DMA概述二、DMA通道注意&#xff0c;想要往串口中寫數據&#xff0c;外部請求信號應該是USARTx_TX&#xff0c;當DR寄存器為空時&#xff0c;產生TX信號&#xff0c;請求DMA。反之&#xff0c;從串口中讀數據&#xff0c;外部請求信號應該是USARTx_RX&#xff0c;當DR寄存器…

C/C++ 中的inline(內聯函數關鍵字)詳解

在 C/C 編程中&#xff0c;函數調用雖然帶來了代碼復用和可讀性提升&#xff0c;但頻繁調用小型函數可能會產生額外的調用開銷&#xff08;call overhead&#xff09;&#xff0c;比如棧幀的建立與銷毀、參數傳遞等。 為了減少這種開銷&#xff0c;C 引入了 inline&#xff08;…

2025 年高教社杯全國大學生數學建模競賽A 題 煙幕干擾彈的投放策略完整成品 思路 模型 代碼 結果 全網首發高質量!!!

煙幕干擾彈主要通過化學燃燒或爆炸分散形成煙幕或氣溶膠云團,在目標前方特定空域形成遮蔽&#xff0c;干擾敵方導彈&#xff0c;具有成本低、效費比高等優點。隨著煙幕干擾技術的不斷發展&#xff0c;現已有多種投放方式完成煙幕干擾彈的定點精確拋撒,即在拋撒前能精確控制煙幕…

嵌入式第四十五天(51單片機相關)

一.1.CPU、MPU、MCU、GPU&#xff1a; CPU&#xff08;中央處理器&#xff09;&#xff1a;計算機的核心部件&#xff0c;負責執行指令和處理數據。 MPU&#xff08;微處理器&#xff09;&#xff1a;通常指更通用的處理器&#xff0c;強調計算能力。 MCU&#xff08;微控制器&…

今天面了一個Java后端工程師,真的讓我猛抬頭

今天面了一個Java后端工程師,真的讓我猛抬頭啊. 現在面試不像傳統的八股文面試,我更多問的都是項目場景相關的問題,但是都能回答的不錯.這一點我還是很驚訝的。 不僅如此,她的技術也很扎實,對Java核心機制&#xff08;JVM、并發、集合等&#xff09;理解深入&#xff0c;回答…

攔截器和過濾器(理論+實操)

攔截器和過濾器 本文旨在夯實基礎以及實戰加深理解,目的是更深的理解以便掌握,希望能跟著動手敲一遍,絕對受益匪淺 在本文,我會先給出兩者的區別(理論知識),隨后是兩者各自的實操實現 文章目錄攔截器和過濾器什么是過濾器和攔截器?1.過濾器2.攔截器執行整體流程攔截器和過濾器…

HTB 賽季8靶場 - Guardian

各位好&#xff0c;最近我的kali崩掉了&#xff0c;崩掉了&#xff0c;建議大家避K 番茄C盤瘦身&#xff0c;這家伙修改了我的avrt.dll文件&#xff0c;導致virtualbox不接受我的avrt.dll文件的簽名了&#xff0c;從而導致virtualbox的虛擬機環境全崩無法開機。弄了幾天&#x…

Rust+slint實現一個登錄demo

系列文章目錄 文章目錄系列文章目錄前言一、為什么前端選擇slint而不是Tauri或者其他GUI框架二、開發工具三、代碼編寫項目結構前端代碼編寫后端開發編寫運行效果總結前言 本文章就是一個簡單rust全棧編程的一個小小的示例供rust新手閱讀學習。 一、為什么前端選擇slint而不是…

2025前端面試題及答案(詳細)

HTML5 的新特性有哪些&#xff1f;簡約版本&#xff1a;“HTML5 新特性主要體現在六個方面&#xff1a; 第一&#xff0c;語義化標簽&#xff0c;比如 header、footer、nav 等&#xff0c;讓頁面結構更清晰&#xff1b; 第二&#xff0c;表單增強&#xff0c;新增了 date、emai…

分詞器詳解(二)

&#x1f50d; 第2層&#xff1a;中等深度&#xff08;15分鐘理解&#xff09; 1. 理論基礎 1.1 BPE的數學原理 核心思想&#xff1a;通過迭代合并高頻字符對構建詞匯表 算法形式化&#xff1a; 初始化詞匯表 V0{c1,c2,...,cn}V_0 \{c_1, c_2, ..., c_n\}V0?{c1?,c2?,...,c…

嵌入式學習 51單片機(3)

UART 概述通用異步收發器&#xff08;UART&#xff09;是一種全雙工、串行、異步通信協議&#xff0c;常用于設備間數據傳輸。包含兩根信號線&#xff1a;RXD&#xff08;接收信號線&#xff09;TXD&#xff08;發送信號線&#xff09;通信方式單工通信方向固定&#xff0c;僅支…

Redis AOF 持久化:銀行的 “交易流水單” 管理邏輯

目錄 一、AOF 的核心邏輯&#xff1a;“每筆交易都記流水” 二、AOF 的三個步驟&#xff1a;從 “臨時記錄” 到 “正式歸檔” 1. 命令追加&#xff1a;記到 “臨時小本本” 2. 寫入與同步&#xff1a;抄到 “正式流水冊” 3. AOF 還原&#xff1a;拿 “流水冊” 重放交易…

代碼隨想錄訓練營第三十天|LeetCode452.用最少數量的箭引爆氣球、LeetCode435.無重疊空間、LeetCode763.劃分字母空間

452.用最少數量的箭引爆氣球 貪心算法 重合最多的氣球射一箭&#xff0c;就是局部用箭數量最少的&#xff0c;全局的用箭數量就是最少的。 首先對二維數組進行排序&#xff0c;這樣就可以讓氣球更加緊湊。 思路&#xff1a;當前氣球是否和上一個氣球區間重合&#xff0c;如…

數據庫事務隔離級別與 MVCC 機制詳解

最近在準備面試&#xff0c;正把平時積累的筆記、項目中遇到的問題與解決方案、對核心原理的理解&#xff0c;以及高頻業務場景的應對策略系統梳理一遍&#xff0c;既能加深記憶&#xff0c;也能讓知識體系更扎實&#xff0c;供大家參考&#xff0c;歡迎討論。在數據庫并發操作…