【Redis】第3節|深入理解Redis線程模型

一、Redis基礎認知

(一)定義與定位

Redis(Remote Dictionary Server)是開源高性能鍵值數據庫,核心特點如下:

  • 數據結構豐富:支持字符串、哈希、列表、集合、有序集合等復雜數據類型,遠超傳統Key-Value存儲范疇。
  • 內存存儲與持久化:數據基于內存存儲確保讀寫高性能,同時通過RDB(快照)和AOF(日志追加)實現持久化,可作為數據庫使用。
  • 功能定位擴展:從單純緩存發展為具備Cache(緩存)、Database(數據庫)、Vector Search(向量搜索)的綜合服務。

(二)2024年Redis生態

  • 產品體系
    • Redis Cloud:基于AWS、Azure等公有云的企業級云服務。
    • Redis Enterprise Software:企業級收費產品,支持高可用性和集群部署。
    • Redis Insight:官方圖形化客戶端與管理套件,簡化運維操作。
    • Redis OSS & Stack:OSS為開源基礎版,Stack是基于OSS的擴展技術棧,提供高級功能如向量搜索。

二、線程模型解析

(一)核心模型:客戶端多線程+服務端單線程為主

  • 客戶端:多線程維護Socket連接,通過maxclients配置最大連接數(默認10000)。
  • 服務端
    • 主線程:基于epoll實現IO多路復用,處理網絡請求、鍵值讀寫等核心邏輯,確保指令串行執行,避免并發問題。
    • 后臺線程(Redis6.x/7.x引入):異步處理持久化(RDB/AOF)、UNLINK刪除、集群同步等耗時操作,減輕主線程壓力。

(二)版本演進

  • Redis4.x前:純單線程模型,所有操作由主線程完成。
  • Redis5.x后:重構線程模型,逐步引入后臺線程處理非核心任務。
  • Redis7.x:支持多線程IO(通過io-threads配置),優化網絡讀寫性能,但核心指令仍由主線程串行執行。

(三)單線程優勢與挑戰

  • 優勢:避免線程上下文切換和資源競爭,簡化編程模型,適合內存操作的高性能需求。
  • 挑戰:無法充分利用多核CPU(需通過分片或多實例擴展),BigKey可能導致主線程阻塞。

三、指令原子性保證機制

(一)復合指令

  • MSETGETSETSETNX等,單個指令內部保證原子性,適用于簡單場景。

(二)Redis事務(Transaction)

  • 流程MULTI開啟事務→命令入隊→EXEC執行/DISCARD放棄。
  • 特點
    • 命令按隊列順序執行,中間不會被其他客戶端打斷。
    • 不保證回滾:若事務執行中某命令出錯(如類型不匹配),其他命令仍會執行,需手動處理異常。
    • Watch機制:通過WATCH key監控數據變化,若事務執行前key被修改,自動放棄事務,避免競態條件。

(三)Pipeline(管道)

  • 原理:將多條命令打包批量發送,減少RTT(往返時間)消耗,提升批量操作效率。
  • 注意:不保證原子性,命令可能被其他客戶端插入,適合非敏感數據的批量處理。

(四)Lua腳本

  • 原子性:腳本在服務端單線程執行,保證整體原子性,支持復雜邏輯(如條件判斷、循環)。
  • 用法:通過EVAL script numkeys keys args執行,腳本中用redis.call調用Redis命令。
  • 優化:熱點腳本可緩存到服務端(SCRIPT LOAD),減少重復傳輸開銷。

(五)Redis Function(函數)

  • 定位:Redis7+引入,允許將Lua腳本封裝為函數提前加載到服務端,客戶端直接調用,提升代碼復用性。
  • 限制:集群環境需手動在每個節點加載,不建議定義過大或過多函數。

四、BigKey問題與應對

(一)定義與影響

  • BigKey:占用內存大或元素數量多的鍵(如百萬級元素的List),導致主線程阻塞、網絡延遲增加。

(二)檢測工具

  • redis-cli --bigkeys:抽樣檢測大鍵,顯示各類型中占用最大的Key。
  • redis-cli --memkeys:按內存占用排序,定位內存大戶。

(三)處理思路

  • 拆分:將大集合拆分為小分片(如按時間戳或ID取模)。
  • 優化數據結構:用更高效的結構替代(如用HyperLogLog統計基數,替代大集合)。
  • 定期監控:通過Redis監控工具(如RedisInsight、Prometheus)實時追蹤Key大小。

五、總結:線程模型與性能優化要點

  1. 線程模型本質:服務端以單線程為主,通過IO多路復用和后臺線程平衡性能與復雜度。
  2. 原子性方案選擇
    • 簡單場景:復合指令或事務。
    • 復雜邏輯:Lua腳本或Function。
    • 批量操作:Pipeline減少網絡開銷。
  3. 性能優化核心
    • 避免BigKey和慢指令(如KEYS *),定期清理無效數據。
    • 合理配置線程參數(如io-threads),結合多核CPU擴展。
    • 利用Redis生態工具(如Redis Cloud、Insight)實現監控與運維自動化。

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

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

相關文章

vben-admin 2.8.0 版本修改 axios響應處理邏輯

此前端框架下的 Axios 在后端返回的結果老是無法正常解析&#xff0c;找到他源碼的封裝類&#xff0c;修正這個問題 文件位于 src\utils\http\axios\index.ts 修改前 transformResponseHook: (res: AxiosResponse<Result>, options: RequestOptions) > {const { t }…

深入理解JavaScript設計模式之原型模式

目錄 前言引入原型模式頭腦風暴傳統方式 vs 原型模式實戰案例&#xff1a;飛機大戰中的分身術 原型模式實現的關鍵秘密實戰演練&#xff1a;造一架能分身的飛機克隆是創建對象的手段原型模式&#xff1a;輕裝上陣的造物術 原型編程范型的一些規則原型編程的四大門規&#xff1a…

【數據庫】概述(純理論)

數據庫系統引論 數據管理系統的發展 數據管理&#xff1a;對數據分類、組織、編碼、存儲、檢索、維護 發展&#xff1a;人工管理、文件系統、數據庫系統 40-50年代 人工管理 數據不保存&#xff0c;沒有專門軟件管理數據&#xff0c;應用程序完全依賴于數據&#xff0c;數據…

語音合成之十七 語音合成(TTS)中文自然度:問題、成因、解決方案

語音合成&#xff08;TTS&#xff09;中文自然度&#xff1a;問題、成因、解決方案 中文TTS系統基本架構中文TTS常見問題深度剖析與解決方案音色跳變成因分析解決方案 聲調與重讀錯誤成因分析業界解決方案 漏讀與斷句錯誤成因分析業界解決方案 在跨語言TTS系統比較中&#xff0…

我在 Linux 進程管理中踩過的坑:僵尸、瞬時與不可中斷進程實戰實錄

作為運維老鳥&#xff0c;我曾在 Linux 進程管理上栽過不少跟頭。記得第一次遇到滿屏僵尸進程時&#xff0c;服務器直接卡到連 SSH 都登不上&#xff0c;看著ps命令里一排排刺眼的Z狀態進程&#xff0c;手心直冒冷汗。后來又碰到過瞬時進程搞崩日志系統&#xff0c;明明監控顯示…

【設計模式】簡單工廠模式,工廠模式,抽象工廠模式,單例,代理,go案例區分總結

工廠模式三種類型&#xff1a; 一、簡單工廠模式&#xff08;Simple Factory&#xff09; 定義&#xff1a; 用一個工廠類&#xff0c;根據傳入的參數決定創建哪一種具體產品類實例。 面試說法&#xff1a; 由一個統一的工廠創建所有對象&#xff0c;增加新產品時需要修改工…

某標桿房企BI平臺2.0升級實踐

當房地產行業從“規模競賽”轉向“精益運營”&#xff0c;數字化轉型成為破局關鍵。某千億房企攜手億信華辰&#xff0c;以“用數據重構業務價值鏈”為目標&#xff0c;歷經6個月完成BI平臺戰略性升級。在這場從“數據可視化”到“決策智能化”的躍遷中&#xff0c;億信華辰ABI…

Lua 腳本在 Redis 中的運用-24 (使用 Lua 腳本實現原子計數器)

實踐練習:使用 Lua 腳本實現原子計數器 實現原子計數器是許多應用程序中的常見需求,例如跟蹤網站訪問量、限制 API 請求或管理庫存。雖然 Redis 提供了 INCR 命令用于遞增整數,但在復雜場景或與其他操作結合時直接使用它可能并不足夠。本課程探討了如何在 Redis 中利用 Lua…

Rust 學習筆記:使用迭代器改進 minigrep

Rust 學習筆記&#xff1a;使用迭代器改進 minigrep Rust 學習筆記&#xff1a;使用迭代器改進 minigrep不使用 clone&#xff0c;而使用迭代器使用迭代器適配器使代碼更清晰在循環或迭代器之間進行選擇 Rust 學習筆記&#xff1a;使用迭代器改進 minigrep 前情提要&#xff1…

el-table配置表頭固定而且高度變化

根據官網提示只要在 el-table 元素中定義了 height 屬性&#xff0c;即可實現固定表頭的表格&#xff0c;而不需要額外的代碼。 如果你想既要固定表頭&#xff0c;又要下方表格高度自適應&#xff0c;可以設置為 height"100%" &#xff1a; 然后外層設置scroll:

弱光環境下如何手持相機拍攝靜物:攝影曝光之等效曝光認知

寫在前面 博文內容為一次博物館靜物拍攝筆記的簡單總結內容涉及&#xff1a;弱光環境拍攝靜物如何選擇&#xff0c;以及等效曝光的認知理解不足小伙伴幫忙指正 &#x1f603;,生活加油 我看遠山&#xff0c;遠山悲憫 持續分享技術干貨&#xff0c;感興趣小伙伴可以關注下 _ 采…

ARM筆記-ARM偽指令及編程基礎

第四章 ARM偽指令及編程基礎 4.1 偽指令概述 4.1.1 偽指令定義 人們設計了一些專門用于指導匯編器進行匯編工作的指令&#xff0c;由于這些指令不形成機器碼指令&#xff0c;它們只是在匯編器進行匯編工作的過程中起作用&#xff0c;所以被叫做偽指令。 4.1.2 偽指令特征 …

智能手表怎么申請歐盟EN 18031認證

智能手表申請歐盟 EN 18031 認證&#xff08;針對消費類物聯網設備的網絡安全標準&#xff09;的流程與智能門鎖類似&#xff0c;但需結合手表的功能特性&#xff08;如數據交互、定位、支付等&#xff09;調整合規重點。以下是具體流程和關鍵要點&#xff1a; 一、標準適配與…

算法-全排列

1、全排列函數的使用 舉例&#xff1a;{1,2,3}的全排列 #include<iostream> #include<bits/stdc.h> using namespace std; typedef long long ll; int main(){ll a[3] {1, 2, 3};do{for (ll i 0; i < 3;i){cout << a[i] << " ";}cout…

面試加分秘籍:校招數據傾斜場景下的SQL優化方案

校招面試經常會問大家有沒有過調優的經驗&#xff0c;相信大家的回答基本都是往數據傾斜和小文件問題這兩方面回答&#xff0c;對于數據傾斜相信大部分同學對熱key打散或null值引發的傾斜已經非常熟悉&#xff0c;但這些內容面試官也是聽膩了&#xff0c;希望大家在面試時候講一…

Elasticsearch索引機制與Lucene段合并策略深度解析

引言 在現代分布式搜索引擎Elasticsearch中&#xff0c;文檔的索引、更新和刪除操作不僅是用戶交互的核心入口&#xff0c;更是底層存儲架構設計的關鍵挑戰。本文圍繞以下核心鏈路展開&#xff1a; 文檔生命周期管理&#xff1a;從客戶端請求路由到分片定位&#xff0c;從內存…

git提交更改

第一步&#xff1a;添加改動 git add . 第二步&#xff1a;提交改動 git commit -m “替換了 SerialPort 庫文件” 第三步&#xff1a;推送到遠程 git push 為什么git 的UI界面做的遠不如SVN

WPF的基礎控件:布局控件(StackPanel DockPanel)

布局控件&#xff08;StackPanel & DockPanel&#xff09; 1 StackPanel的Orientation屬性2 DockPanel的LastChildFill3 嵌套布局示例4 性能優化建議5 常見問題排查 在WPF開發中&#xff0c;布局控件是構建用戶界面的基石。StackPanel和DockPanel作為兩種最基礎的布局容器&…

互聯網大廠Java求職面試:AI大模型推理服務性能優化與向量數據庫分布式檢索

互聯網大廠Java求職面試&#xff1a;AI大模型推理服務性能優化與向量數據庫分布式檢索 面試現場&#xff1a;技術總監的連環追問 技術總監&#xff1a;&#xff08;翻看著簡歷&#xff09;鄭薪苦&#xff0c;你在上一家公司參與過LLM推理服務的性能優化項目&#xff1f;說說你…

如何解決網站服務器的異常問題?

當網站服務器出現異常情況&#xff0c;導致用戶無法正常訪問網頁信息的時候&#xff0c;該如何解決這一問題呢&#xff1f;小編下面就帶領大家共同探討一下這一問題。 企業在面對網站服務器異常時&#xff0c;首先要對服務器硬件設備進行詳細的檢查&#xff0c;可以使用硬盤檢測…