簡述redis的單線程模式

在redis版本6之前,網絡IO和鍵值對讀寫都是由一個線程來完成的。而redis的其他功能,比如持久化、異步刪除、集群數據同步等,是由其他線程完成的。

為什么采用單線程

多線程有助于提升吞吐率(系統同時處理的請求數),但處理共享資源時,會帶來額外的開銷。設計有問題時,采用多線程甚至會造成性能下降。為了減少并發訪問控制問題,redis直接采用單線程模式。

redis的大部分操作都是在內存上完成的,而且redis采用哈希表、跳表等性能良好的數據結構,以及多路復用機制,使得redis在單線程模式下也能實現高性能和高吞吐率。

linux的IO多路復用機制

Linux的IO多路復用機制指的是一個線程處理多個IO流,即select/epoll機制。內核一直監聽套接字的請求,一旦有相關請求,就交給redis處理,從而實現redis線程處理多個IO流的效果。

為了在請求到達時能通知到Redis線程,select/epoll提供了基于事件的回調機制,即針對不同事件的發生,調用相應的處理函數。相關事件被放到一個事件隊列,redis單線程對該事件隊列不斷處理,避免一直輪詢是否有請求發生造成CPU資源浪費。因為redis一直在處理事件隊列,所以能及時響應請求。

redis單線程處理IO請求瓶頸

  1. 任意一個請求在server中一旦耗時較長,就會影響整個server的性能,也就是說,后面的請求都要等前面的先處理完。耗時操作包括以下幾種:
    1. 操作big key:寫入一個big key在分配內存時需要耗費一定時間。刪除一個big key去釋放內存也需要一定時間。
    2. 操作大量數據的命令。類似于mysql的select * from xxx的操作會占用大量時間。
    3. 大量key集中過期。
    4. 淘汰策略。內存不夠用時,每次寫入都要淘汰一些key,淘汰會耗時較長。
    5. AOF開啟always機制,每次寫入都將操作進行刷盤,拖慢redis性能
    6. 主從全量同步生成RDB:雖然采用fork子進程生成快照,但fork的一瞬間也會阻塞整個線程,實例越大,阻塞越久。
  1. 并發量非常大時,雖然采用了IO多路復用,但讀寫客戶端數據依舊是同步IO,只能單線程依次讀取客戶端數據,無法利用CPU的多核。

redis6.0的多線程

redis6.0引入了多線程,但只是多線程處理網絡IO請求,對于讀寫命令,redis仍然使用單線程處理。redis 6.0中,多線程機制默認是關閉的,相關配置:

# 啟用多線程
io-threads-do-reads yes
# 設置線程數。官方建議小于主機CPU核數
io-threads 6

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

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

相關文章

WebSocket深度指南:從零基礎到生產級應用

??目錄 1. WebSocket基礎概念深度解析 2. WebSocket協議技術詳解 3. WebSocket生命周期與狀態管理 4. Spring Boot WebSocket完整實現 5. 完整聊天室項目實戰 6. 高級功能與擴展應用 1. WebSocket基礎概念深度解析 1.1 什么是WebSocket?深度理解 WebSocket是HTML5開…

復現 apache HTTPD 換行解析漏洞(CVE-2017-15715)

一、漏洞環境 docker環境 http://192.168.99.124:8082二、漏洞原理 Apache HTTPD是一款HTTP服務器,它可以通過mod_php來運行PHP網頁。其2.4.0~2.4.29版本中存在一個解析漏洞,在解析PHP時,1.php\x0A將被按照PHP后綴進行解析,導致…

創始人 IP 起盤方法論:從 0 到 1 的系統化破局路徑

在流量邏輯不斷更新的當下,創始人 IP 如何構建可持續的商業閉環?結合行業頭部案例的實戰經驗,可梳理出一套兼顧落地性與前瞻性的起盤策略,幫助 IP 在波動的市場中建立穩定的變現能力。 一、定位:在動態中驗證方向 某…

數據結構 6(算法)

一、算法 1、概念 問題的求解方法 2、算法的特性和設計要求 算法的特性: 確定性 有窮性 輸入輸出 可行性 設計要求: 正確性 高效性 低存儲 健壯性 可讀性 3、時間復雜度O(n) 用于評估程序執行…

Android 開發問題:android.content.res.Resources$NotFoundException: Resource ID

android.content.res.Resources$NotFoundException: Resource ID #0xff412804問題原因 該異常表示 Android 系統嘗試通過資源 ID 查找資源,例如,顏色、圖片等,但未查找到對應資源 其中,0xff412804 是一個硬編碼的整型顏色值&…

03.自動特征提取(深度學習)核心邏輯:通過多層非線性變換,讓模型自動學習從原始數據到高層特征的映射。為什么多層非線性變換可以達到這樣的效果?

在深度學習中,多層非線性變換能夠實現自動特征提取的核心原因在于其對數據表征的分層學習能力和非線性映射的表達優勢。以下從理論基礎、數學機制、實際效果三個層面展開解析: 一、非線性變換的本質:突破線性模型的表達局限 線性模型的局限性 線性變換(如矩陣乘法)只能學…

42-Oracle 23 ai 安全新特性(Audit統一審計)

小伙伴們業務和安全運維中需要數據庫審計都是由哪些模塊來實現的,專門的第三方產品嗎?在醫療領域防統方等業務場景和數據庫的審計集合很是緊密。 在Oracle逐個版本的演進中,Oracle 23ai 的審計特性在安全領域的重大革新,延續傳統…

Python 爬蟲入門 Day 4 - 模擬登錄爬蟲與 Session 維持

Python 第二階段 - 爬蟲入門 🎯 今日目標 學習什么是 Cookie / Session,為什么要維持登錄狀態掌握 requests.Session 用法模擬登錄一個帶登錄表單的網站獲取登錄后的頁面內容 📘 學習內容詳解 🔐 什么是 Session? …

新零售系統商城開發全解析

一、新零售系統商城概述? (一)新零售的概念? 新零售依托互聯網與物聯網技術,以數據驅動為核心,打破線上線下的界限,構建起一體化的全新零售模式。它不再局限于傳統的銷售渠道,而是通過整合線上電商平臺、線下實體店鋪以及現代物流配送等多方面資源,實現商品、服務、…

c++基礎入門——c++初識

我看的是B站黑馬程序員的課《C教程》。準備用這個專欄記錄一下學習筆記。 這套c課程的課程安排如下: 階段內容目標案例第一階段C基礎語法入門對c有初步了解,能夠有基礎編程能力通訊錄管理系統第二階段c核心編程介紹c面向對象編程,為大型項目…

【css】設置了margin-top為負數,div被img覆蓋的解決方法

文章目錄 場景默認情況下&#xff0c;層疊順序是如何工作的&#xff1f;為什么 img 會覆蓋 div&#xff1f;解決方法 場景 <img src"image.jpg"> <div>Content</div>有代碼如上&#xff0c;img src是一個https網絡圖片鏈接。 若div的margin-top為…

4 Studying《ARM System Developer’s Guide》1-7

目錄 Preface Chapter1 ARM Embedded Systems 1.1 The RISC design philosophy 1.2 The ARM Design Philosophy 1.3 Embedded System Hardware 1.4 Embedded System Software 1.5 Summary Chapter2 ARM Processor Fundamentals 2.1 Registers 2.2 Current Program St…

Vue3 + Axios + Ant Design Vue 請求封裝詳解教程(含 Token 鑒權、加密、下載)

Vue3 Axios Ant Design Vue 請求封裝詳解教程&#xff08;含 Token 鑒權、加密、下載&#xff09; 一、完整源碼&#xff08;請先閱讀&#xff09; import { message, Modal } from ant-design-vue; import axios from axios; import { localRead } from //utils/local-util…

SQL注入安全研究

?據OWASP 2023報告顯示&#xff0c;SQL注入連續15年位居Web安全威脅榜首&#xff0c;在應用漏洞中占比34.1%?? ?NIST統計顯示&#xff1a;2022-2023年高危SQL注入漏洞同比增長27%&#xff0c;企業平均修復成本達$320,000? 一、漏洞本質與技術原理解析 1. SQL注入核心機理…

Ubuntu最新版本(Ubuntu22.04LTS)安裝nfs服務器

NFS&#xff08;Network File System&#xff09;是一種允許不同計算機之間共享文件的網絡文件系統。 在Ubuntu 22.04 LTS中&#xff0c;您可以使用以下步驟安裝并配置NFS服務器。 一、安裝NFS服務器 在Ubuntu 22.04 LTS中&#xff0c;您可以使用以下命令安裝NFS服務器&…

學習筆記丨數字信號處理(DSP)的應用——圖像處理篇

&#x1f4cc; DSP在圖像處理中的應用&#xff1a;核心技術解析 數字信號處理&#xff08;DSP&#xff09;是圖像處理的核心技術之一&#xff0c;廣泛應用于增強、壓縮、分析和識別等領域。以下是DSP在圖像處理中的關鍵應用及技術細節&#xff1a; 目錄 &#x1f50d; 圖像增…

Kafka Broker處理消費者請求源碼深度解析:從請求接收到數據返回

在Kafka生態體系中&#xff0c;消費者從Broker拉取消息是實現數據消費的關鍵環節。Broker如何高效處理消費者請求&#xff0c;精準定位并返回對應分區數據&#xff0c;直接決定了整個消息系統的性能與穩定性。接下來&#xff0c;我們將聚焦Kafka Broker端&#xff0c;深入剖析其…

Objective-C與Swift混合編程

Objective-C與Swift混合編程的基本概念 Objective-C與Swift混合編程是指在同一項目中同時使用兩種語言進行開發。這種混合編程方式在遷移舊項目或利用Swift新特性時非常有用。兩種語言可以相互調用&#xff0c;但需要遵循特定的規則和橋接機制。 設置混合編程環境 在Xcode項…

IDE深度集成+實時反饋:企業級軟件測試方案Parasoft如何重塑汽車巨頭的測試流程

在汽車行業數字化轉型的浪潮中&#xff0c;全球第四大汽車集團Stellantis曾面臨嚴峻的測試效率挑戰&#xff1a;開發與測試流程脫節、團隊對“測試左移”策略的抵觸、TDD&#xff08;測試驅動開發&#xff09;推進困難……這些痛點直接導致質量保障滯后&#xff0c;拖慢產品交付…

【Linux】Linux異步I/O -libaio

一、libaio 原理概述 1.1 libaio 介紹 libaio&#xff08;Linux Asynchronous I/O&#xff09;是 Linux 內核提供的異步 I/O 庫&#xff0c;其核心原理是&#xff1a; 異步提交&#xff1a;應用程序通過 io_submit 提交 I/O 請求后立即返回&#xff0c;不阻塞進程事件通知&a…