Redis--線程模型詳解

Redis線程模型

Redis內部使用的文件事件處理器(基于Reactor模式開發的)file event handler是單線程的,所以Redis線程模型才叫單線程模型,它采用IO多路復用機制同時監聽多個socket,當被監聽的socket準備好執行accep、read、write、close等操作時,IO多路復用程序會將這些事件的socket壓入一個隊列中,然后有序地的將這些socket傳送給文件事件分派器,文件事件分派器接收到socket之后會根據socket產生的事件類型調用對應的事件處理器進行處理。

什么是IO多路復用機制?

IO多路復用技術是一種處理并發IO操作的技術,核心是讓單個線程去監視多個連接,一旦某個連接觸發了讀、寫事件,就去通知應用程序,去處理這個鏈接,傳統的IO模型中,會為每一個連接開啟一個線程處理其IO事件,這種模型系統開銷大,資源消耗高,IO多路復用通常是通過調用系統的 select poll epoll 來監視IO事件。

IO多路復用技術的優點?

  • 減少了線程的創建和開銷,減少了系統的資源消耗。
  • 提高了系統的并發能力,同等資源下可以處理更多的IO事件。
  • 通過事件驅動的方式,避免了輪詢方式的消耗。

文件事件處理器的組成部分?

  1. 多個socket。
  2. IO多路復用程序。
  3. 隊列。
  4. 文件事件分配器。
  5. 文件事件處理器。
    在這里插入圖片描述

文件事件處理器有哪些具體的處理器?

  1. 連接應答處理器:用于處理客戶端的連接請求。
  2. 命令請求處理器:用于執行客戶端傳過來的命令。
  3. 使用(使用次數最少)淘汰算法,LFU是淘汰一段時間內,使用次數最少的key。

Reidis 是單線程的為什么效率還這么高?

  1. Redis是基于內存操作的,數據存儲在內存中,純內存訪問,而內存訪問的速大概是100納秒。
  2. 非阻塞的IO模型,Redis使用epol來實現IO多路復用技術,再加上Redis自身的事件處理模型,不在IO上浪費時間。
  3. 單線程避免了線程競爭切換帶來的時間消耗。
  4. 高效的數據結構,合理的數據編碼。
  5. 合理的線程模型,基于非阻塞的IO多路復用技術。

那為什么Redis 6.0之后又改用多線程呢?
隨著網絡硬件的發展,Redis開發者發現Redis的性能問題有時候會出現在網絡IO處理上,單個線程處理網絡請求的速度跟不上底層硬件的速度,于是在Redis 6.0中提出了多線程模型,可以采用多個IO線程來處理網絡請求,提高處理網絡請求的速度,Redis的多線程模型并不是拋棄了單線程,Redis還是使用單線程處理客戶端請求,執行讀寫命令。
Redis多線程模式是默認關閉的。

如有不正確的地方請各位指出糾正。

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

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

相關文章

072:vue+cesium 實現下雪效果

第072個 點擊查看專欄目錄 本示例的目的是介紹如何在vue+cesium中實現下雪效果,這里使用著色器來實現實例特效。 直接復制下面的 vue+cesium源代碼,操作2分鐘即可運行實現效果. 文章目錄 示例效果配置方式示例源代碼(共120行)著色代碼實現心得:專欄目標示例效果

Python世界之附加

一、數據類型轉換 1.隱式類型轉換 在隱式類型轉換中,Python 會自動將一種數據類型轉換為另一種數據類型。 對兩種不同類型的數據進行運算,較低數據類型就會轉換為較高數據類型以避免數據丟失。 2.顯式類型轉換 在顯式類型轉換中,用戶將對…

Linux設置靜態IP地址

在Linux系統中設置靜態IP地址的步驟如下: 1.使用管理員權限登錄系統。 2.編輯網卡配置文件: 網卡配置文件通常位于 /etc/sysconfig/network-scripts/ 目錄下,可以使用命令 cd /etc/sysconfig/network-scripts 切換到該目錄。 …

Wifi技術知識

參考文章 https://www.163.com/dy/article/FDFT60T70550I80C.html https://www.zhihu.com/tardis/bd/art/485711752?source_id1001 wifi代數 以前大家看電腦手機路由器參數,WiFi都是802.11a/b/n/g/ac/ax,這學名讀起來有些麻煩,現在好了&…

第12屆智能計算與無線光通信國際會議(ICWOC 2024)即將召開!

2024年第12屆智能計算與無線光通信國際會議(ICWOC 2024)將于2024年6月21-23日在中國重慶召開。隨著深度學習等人工智能技術的不斷進步,以自動化、自治為特征的智能應用預計將激增。本屆會議主題為“光通信智能鏈接”,旨在為相關技…

ubuntu環境下docker容器詳細安裝使用

文章目錄 一、簡介二、ubuntu安裝docker1.刪除舊版本2.安裝方法一3. 安裝方法二(推薦使用)4.運行Docker容器5. 配置docker加速器 三、Docker鏡像操作1. 拉取鏡像2. 查看本地鏡像3. 刪除鏡像4. 鏡像打標簽5. Dockerfile生成鏡像 四、Docker容器操作1. 獲取…

Qt | TCP服務器端框架搭建

文章目錄 server.hserver.cppmain.cpptcpclientsocket.htcpclientsocket.cpptcpserver.htcpserver.cpp提示運行QTcpServer 是 Qt 框架中的一個類,用于實現 TCP 服務器。它提供了一種方便的方式來創建和管理 TCP 服務器,以便與客戶端進行通信。QTcpServer 類屬于 QtNetwork 模…

Webserver(1): C++實現線程池

在實現線程池之前,首先對線程池中所需要用到的互斥鎖、條件變量和信號量進行了簡單的封裝。 互斥鎖、條件變量和信號量封裝 locker.h頭文件如下(已詳細注釋) /* 這里面對互斥鎖,條件變量和信號量進行了封裝 保證工作隊列的線程…

微服務架構的流行框架之:Dubbo Spring Cloud

Dubbo Dubbo是一個高性能、輕量級的開源Java RPC(Remote Procedure Call,遠程過程調用)框架,由阿里巴巴開發并貢獻給了Apache基金會,成為Apache的頂級項目。Dubbo提供了RPC通信和服務治理的解決方案,使得構…

深入理解C語言中的變量和常量

變量和常量 1. 前言2. 預備知識2.1 printf和%d2.2 \n2.3 scanf2.4 scanf在vs中報錯2.5 extern2.6 數組的初始化 3. 變量和常量的區別4. 變量4.1 定義變量的方法4.2 變量的分類4.2.1 局部優先 4.3 變量的使用4.4 變量的作用域4.4.1 局部變量的作用域4.4.2 全局變量的作用域 4.5 …

機器學習|KNN和Kmeans

KNN和Kmeans KNN KNN-K個最近的鄰居,而K是可人先預設出來的。 所謂近朱者赤,近墨者黑。 可以選取離當前最近的K個樣本來作為輔助判斷,因為本樣本和最近的K個樣本應該是處于一種相似的狀態。 以下是一個蘋果和梨的識別任務。 圖上會出現一個未…

深入Spring Boot核心技術:代碼實戰解析

第一章:揭開Spring Boot自動配置的面紗 自動配置原理 讓我們首先通過一個簡化的Spring Boot應用啟動類來直觀感受自動配置的工作原理: java import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.Sprin…

【軟件設計師】通俗易懂的去了解算法的時間復雜度

🐓 時間復雜度 常用排序的時間復雜度 時間頻度 算法需要花費的時間,和它語句執行的次數是成正比的,所以會把一個算法種語句執行次數稱為語句頻度和時間頻度、記作T(n)。 定義 時間復雜度就是找到一個無限接近時間頻度T(n)同數量級的函數&am…

小腦萎縮患者生活指南:守護你的每一步

親愛的讀者朋友們,今天我們要聊一聊一個特殊但非常重要的群體——小腦萎縮患者。在這個充滿挑戰的旅程中,我們將一起探索如何用愛和智慧為患者打造一個更加安全、舒適的生活環境。 小腦萎縮是指小腦細胞逐漸減少,導致小腦體積縮小的一種病癥…

全量知識系統問題及SmartChat給出的答復 之16 幣圈生態鏈和行為模式

Q.42 幣圈生態鏈和行為模式 我認為,上面和“幣”有關的一系列概念和技術,按設計模式的劃分 ,整體應該都屬于行為模式,而且應該囊括行為模式的所有各個方面。 而行為又可以按照三種不同的導向(以目的或用途為導向、過…

互聯網摸魚日報(2024-03-04)

互聯網摸魚日報(2024-03-04) 36氪新聞 Sora來了,你又焦慮了嗎? 最前線|安踏首家球鞋集合店落地北京三里屯 一位中國遙感科學家,決定“跨界”拯救瀕危動物野駱駝 | 最前線 本周雙碳大事:工信部等七部門發文推動制造…

mirthConnect忽略HTTPS SSL驗證

mirthConnect SSL忽略驗證 1、下載https網站證書 點擊不安全---->證書無效 2、查看mirth 秘鑰庫口令 在mirthConnect 的conf目錄下面keystore.storepass 3、導入證書到本地 在jdk的bin目錄下面執行 keytool -importcert -file "下載的網站證書路徑" -keysto…

LeetCode每日一題【c++版】- leetcode 225.用隊列實現棧

題目描述 請你僅使用兩個隊列實現一個后入先出(LIFO)的棧,并支持普通棧的全部四種操作(push、top、pop 和 empty)。 實現 MyStack 類: void push(int x) 將元素 x 壓入棧頂。int pop() 移除并返回棧頂元素…

Python中按指定數量分割列表字符串的方法

引言 處理列表數據時,有時我們需要將一個包含長字符串的列表分割成按照特定長度的小字符串的多個列表。這在文本處理、批量數據處理或者當我們需要將數據分塊進行并行處理時非常常見。Python作為一個強大的編程語言,提供了很多方便的方法來實現這一功能…

CV論文--2024.3.4

1、Deep Networks Always Grok and Here is Why 中文標題:深度網絡總是讓人摸不著頭腦,原因如下 簡介:本文探討了深度神經網絡(DNN)中一種稱為"延遲泛化"或"Grokking"的現象。在接近零的訓練誤差…