Redis單線程

来源:https://www.cnblogs.com/xw-01/p/18227365
-Advertisement-
Play Games

Redis是基於Reactor模式開發的網路事件處理器,這個處理器是單線程的,所 以redis是單線程的。 為什麼它是單線程還那麼快呢? 主要有以下幾個原因: 一、純記憶體操作 由於Redis是純記憶體操作,相比於磁碟來說,記憶體就快得多,這個是Redis快的主要 原因。 二、多路復用I/O機制(NIO) ...


Redis是基於Reactor模式開發的網路事件處理器,這個處理器是單線程的,所

以redis是單線程的。


為什麼它是單線程還那麼快呢?

主要有以下幾個原因:


一、純記憶體操作

由於Redis是純記憶體操作,相比於磁碟來說,記憶體就快得多,這個是Redis快的主要

原因。


二、多路復用I/O機制(NIO)


Redis採用的是多路復用非阻塞IO機制,即NIO。這允許Redis同時處理多個網路

連接和I/O流,提高了吞吐量。非阻塞I/O使得Redis能夠高效地處理大量的客戶端

連接和數據讀寫操作,而不會因為過多的I/O操作導致性能下降或線程阻塞。


三、單線程避免上下文切換


單線程反而沒有了多線程上下文切換帶來的損耗,已經資源競爭帶來的複雜性。上

下文切換會消耗CPU資源並降低性能,而競爭條件可能導致數據不一致和性能下降


四、簡單的數據結構


Redis的數據結構相對簡單,這使得數據在記憶體中的訪問更加連續和一致,有利於

充分利用CPU緩存,減少緩存失效的開銷。


最後,值得註意的是Redis6.0引入了多線程。在Redis6.0之前,Redis>Redis6.0引入了多線程。在Redis6.0之前,Redis Server端處

理接受到客戶端請求時,從Socket連接建立到指令的讀取、解析、執行、寫回都

是由一個線程來處理。這種方式在客戶端請求比較多的情況下,單個線程的網路處

理效率較慢,導致客戶端的請求處理效率較低。

Redis其實主要分成兩個模塊:網路IO處理模塊命令執行模塊。引入多線程是為

瞭解決網路I/O模塊效率問題,利用多核CPU的優勢,提升網路I/O處理性能。而

命令執行模塊還是使用單線程,從而繼續保證了命令執行的原子性。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 《最少必要面試題》第一版 相信大家都會有種及眼熟又陌生的感覺、看過可能在短暫的面試後又馬上忘記了。JavaPub 在這裡整理這些容易忘記的重點知識及 解答,建議收藏,經常溫習查閱。 點擊線上閱讀《最少必要面試題》 更多 作者:JavaPub2024 目錄緩存1. 什麼是緩存?2. 為什麼要用緩存?3 ...
  • 一、背景介紹 1.1 爬取目標 用python開發的爬蟲採集軟體,可自動按指定博主抓取該博主已發佈筆記。 為什麼有了源碼還開發界面軟體呢?方便不懂編程代碼的小白用戶使用,無需安裝python,無需改代碼,雙擊打開即用! 軟體界面截圖: 爬取結果截圖: 結果截圖1: 結果截圖2: 結果截圖3: 以上。 ...
  • Lambda表達式 Lambda表達式,也可以稱為閉包,是Java 8發佈的最重要新特性 Lambda允許把函數作為一個方法的參數(函數作為參數傳遞進方法中) 使用Lambda表達式可以使代碼變的更加簡潔緊湊 語法: (parameter) -> expression (parameter) -> ...
  • Node.js是一個基於 Chrome V8 引擎的 JavaScript 運行環境。Node.js 使用了一個事件驅動、非阻塞式 I/O 的模型,使其輕量又高效。Express是一個保持最小規模的靈活的 Node.js Web應用程式開發框架,為Web和移動應用程式提供一組強大的功能。使用Node ...
  • 進程是電腦分配資源的基本單位,線程是cpu調度的基本單位 線程基本概念: LWP:light weight process 輕量級的進程。創建線程的底層函數和進程一樣,都是clone,因此線程的本質仍是進程(在linux環境下) 與進程相比,線程有獨立的TCB結構體(類似於進程的PCB),但沒有獨 ...
  • this,構造器,static,final,單例模式 this關鍵字 在java中this是一個引用變數,即指向當前對象地址的引用(指針),→可以把this當作當前對象,便於更好的索引. this() 實際是調用了當前對象的構造器 1. 引用當前對象的屬性 當在方法中要訪問當前對象的屬性時,可以用t ...
  • 1.線程池本質 ​ 多個線程組成的一個集合,目的為了併發執行任務,定義時是一個結構體,成員有互斥鎖,條件變數,任務鏈隊列指針,任務鏈隊列中等待的任務個數,當前活躍的線程數量,線程ID,線程銷毀標記等 2.線程池的關鍵技術 (1)萬能函數指針(通用函數指針): *void *(*p)(void ) ( ...
  • 要求:調用PLL—IP核,50Mhz晶振輸入,輸出四路時鐘不同信號:100Mhz,25Mhz,50Mhz(90°相位),50Mhz(20%占空比)。 晶元型號:cyclone Ⅳ EP4CE10F17C8 平臺工具:Quartus II 15.0 (64-bit)、Modelsim SE-64 ... ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...