Redis深入理解-內核請求處理流程、數據傳輸協議

Redis 內核級請求處理流程

Redis Server 其實就是 Linux 服務器中的一個進程

主要還是下圖的流程

  1. 應用先和 server 端建立 TCP 連接
  2. 建立連接之后,server 端就會有一個與該客戶端通信的 socket,客戶端的讀寫請求發送到服務端的 socket
  3. 那么通過 IO 多路復用,收到讀寫請求的 socket 會到隊列中排隊等待處理
  4. 由文件事件分發器將事件分發給對應的命令請求處理器
  5. server 端內部也是有一個 Redis Client 的,由這個 Client 來處理對數據的操作,這個 Client 有一個輸入緩沖區和輸出緩沖區,先將讀寫命令寫入輸入緩沖區
  6. 再去找到對應的 Redis Command 也就是查找到對應的命令
  7. 之后就去操作內存中的數據
  8. 操作后將操作結果寫入輸出緩沖區中
  9. 最終命令請求處理器將輸出緩沖區中的響應結果通過 Socket 發送給客戶端

在這里插入圖片描述

Redis 數據傳輸協議

參考文章:https://redis.com.cn/topics/protocol.html

Redis客戶端和服務器端通信使用名為 RESP (REdis Serialization Protocol) 的協議。雖然這個協議是專門為Redis設計的,它也可以用在其它 client-server 通信模式的軟件上。

該協議用于 Redis 客戶端和服務端之間進行通信

RESP 協議格式:

  • 單行字符串(Simple Strings): 響應的首字節是 +
  • 錯誤(Errors): 響應的首字節是 -
  • 整型(Integers): 響應的首字節是:
  • 多行字符串(Bulk Strings): 響應的首字節是 $
  • 數組(Arrays):響應的首字節是 *

RESP 協議的每一個部分都是以 \r\n 結束,也就是換行結束

AOF 持久化文件中存儲的數據也是 RESP 協議的數據格式。

RESP 協議優點:

  • 實現簡單,容易解析

    redis 的 set key value 命令轉為 RESP 協議數據如下:
    *3
    $3
    SET
    $3
    key
    $5
    value
    
  • RESP 是二進制安全的,因為使用了前綴長度來傳輸大量數據,因此不需要去檢查內容中是否存在特殊字符

Redis 內核中的請求數據結構

Redis 協議說明文檔:http://www.redis.cn/topics/protocol.html

# *3 表示有 3 個命令字符串
# $3 表示長度
# \r\n 也就是換行操作
*3\r\n$3\r\nSET\r\n$3\r\nkey\r\j$5\r\nvalue\r\n# 把\r\n翻譯成換行,數據就為下邊這個樣子
*3
$3
SET
$3
key
$5
value

對于 set key value 命令來說,通過協議組織成上邊的數據,那么從 client 端發送到 server 需要序列化成字節數據流,之后再通過 socket 進行傳輸,server 端收到字節流數據之后,會進行反序列化,將字節流數據轉為了 *3\r\n$3\r\nSET\r\n$3\r\nkey\r\j$5\r\nvalue\r\n,這個數據就會被放到 server 端的 RedisClient 的輸入緩沖區中

那么這個協議數據在 server 中的 Redis Client 中,就會被解析成 argv 的一個參數,也就是具體的命令,如下圖:

在這里插入圖片描述

那么在 argv 中就解析出來了真正需要執行的命令了,下一步就要執行對應的命令了

Redis 內核中命令函數的查找

在 Redis Server 中將所有的命令都放在了一個命令查找表中,那么在上邊的 argv 中拿到了命令的名稱,就可以去命令查找表中去查找對應的 RedisCommand,在 Redis Client 的輸入緩沖區中有一個變量 cmd 就會去指向該命令所對應的 RedisCommand,之后就可以真正的去調用命令函數,來操作 Redis 中的內存數據結構,之后將操作的結果還是按照 Redis 的協議給放入到 Redis Client 的輸出緩沖區中,之后就可以通過 Socket 將結果返回給客戶端了

在這里插入圖片描述

Redis Server 啟動流程分析

Redis 我們作為緩存使用比較多

其實 Redis 本質上是一個基于內存的 Nosql 數據存儲服務,只是因為 Redis 是基于內存進行操作,比較快,所以我們用來做緩存

那么 Redis Server 基于內存操作,如果 Redis 重啟之后,內存中的數據就會丟失,所以 Redis 還需要進行持久化的一個操作

那么持久化就分為了 RDB 和 AOF,RDB 的話是周期性將內存中的全量數據都給復制到磁盤中(存儲文件為壓縮的二進制文件),適合做數據的冷備份,放到其他服務器的磁盤上去,如果當前服務器磁盤損壞,就可以從其他服務器讀取該 RDB 文件,恢復 Redis 中的內存數據

一般使用 AOF 來做數據的持久化,用 RDB 做一個周期性的冷備份

AOF 將內存數據同步到磁盤中,一般采用每秒同步一次,如果同步頻率過高,就會導致 Redis 性能退化,當 Redis 突然宕機,可能會丟失 1s 內的內存數據,那么在 redis-server 進程重啟時,就會把磁盤存儲的 aof 文件的數據給讀取到內存中,還原 Redis 上次運行時的內存情況

Redis 為什么需要分布式集群模式?

單臺 Redis 瓶頸在哪里?

在于內存,每一臺機器的內存是有限的,所以如果數據量很大的情況下,一臺 Redis 就不夠用了,因此需要分布式集群模式

在分布式集群模式中,就可以讓每一個節點存儲一部分的數據,來降低內存容量對于 Redis 的影響

Redis 分布式集群模式下內核中的數據結構

Redis Server 在分布式模式下,需要存儲哪些內容的?

主要是存儲集群的狀態(state)以及集群中的節點(nodes),以及當前節點的一個角色(myself)

在這里插入圖片描述

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

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

相關文章

分組背包問題學習筆記 AcWing 9. 分組背包問題

原題 有 N� 組物品和一個容量是 V� 的背包。 每組物品有若干個,同一組內的物品最多只能選一個。 每件物品的體積是 vij���,價值是 wij���,其中 …

PC8233(CC/CV控制)高耐壓輸入5V/3.4A同步降壓電路內建補償帶恒流恒壓輸出

概述 PC8233(替代CX8853)是一款同步降壓調節器,輸出電流高達3.4A,操作范圍從8V到32V的寬電源電壓。內部補償要求最低數量現成的標準外部組件。PC8233在CC(恒定輸出電流)模式或CV(恒定輸出電壓)模式&#x…

【前端】前端監控?埋點

文章目錄 前端監控分為三個方面前端監控流程異常監控常見的錯誤捕獲方法主要是 try / catch 、window.onerror 和window.addEventListener 等。Promise 錯誤Vue 錯誤React 錯誤 性能監控用戶行為監控常見的埋點方案來源 前端監控分為三個方面 異常監控(監控前端頁面…

基于element-ui后臺模板,日常嘮嗑

后面會補充github地址 文章目錄 目錄 文章目錄 案例說明 1.引入庫 2.創建布局組件 3.創建布局組件 4.菜單效果展示 5.創建頂部組件 5.創建頂部面包屑組件 6.創建內容區域組件 7.效果總覽 7.布丁(實現一些小細節) 前言一、pandas是什么?二、使…

CentOS7中升級OpenSSL詳細教程

文章目錄 一. 引言二. 升級前的準備1.備份現有配置2. 檢查系統版本3. 安裝依賴 三. OpenSSL安裝四. 驗證 一. 引言 OpenSSL: 是用于保護數據安全的重要工具。它能提供加密,解密等多項功能。 然而,隨著技術的發展和新的安全漏洞的出現,使用最…

管理類聯考——英語二——備考 100 句涵蓋所有詞匯

全中 在海里的這個地區,熊貓們喜歡就著蘇打碗豆喝茶。而大洋州的民兵則喜歡經過半島,帶著編劇本的公式上餐廳去。附件的電影院里有額外的歌劇和香蕉,這一時代的斑馬們被外面的天線所吸引。實驗室里的蟹想用它的肋骨去戳四肢象燈炮的小羊。但…

千夢網創:創業,一場游戲一場夢

創業這件事就好比一場養成類游戲,而我們自己就是游戲主角。 這個游戲有一個特殊之處在于:SSS級裝備有穿戴等級設定,就算你氪重金買到了一把神器,自身閱歷不夠也根本無法發揮它的強大威力而只能當個裝飾。 這就要求我們真正沉浸在…

催單開發信怎么寫?外貿人如何寫催單郵件?

年末催單開發信編寫技巧?最有效的催單話術有哪些? 催單開發信成為了企業間日常溝通的重要一環。這些信件不僅有助于促進業務發展,還可加強供應鏈的協調,確保貨物及時送達。蜂郵EDM將介紹如何寫一封出色的催單開發信,以…

ubuntu20.04安裝多版本cuda,切換版本

1. 安裝cuda toolkit: 下載網站 https://developer.nvidia.com/cuda-11.3.0-download-archive 選擇版本,這里選擇11.3 wget https://developer.download.nvidia.com/compute/cuda/11.3.0/local_installers/cuda_11.3.0_465.19.01_linux.run給cuda權限: chmod x…

Linux加強篇001-部署Linux系統

目錄 一、前言 1.1準備工具 1.2安裝配置VM虛擬機 1.3安裝軟件 1.4系統初始化進程 1.5重置root密碼 二、鞏固練習 1.為什么建議讀者在下載系統文件后先進行校驗而不是直接安裝呢? 2.使用虛擬機安裝Linux系統時,為什么要先…

科技與藝術如何交織出“理想之家”?三星電視給出家電行業最優解答

作者 | 曾響鈴 文 | 響鈴說 理想的家,是什么樣子? 關于這個問題,社交媒體上有形形色色的答案。很多人的夢中情屋是原木風、奶油色,點綴著綠意盎然的植物;還有一些人的Dream house是用全屋智能將科技感拉滿,再配上打…

OpenStack云計算平臺-計算服務

目錄 一、計算服務概覽 二、安裝并配置控制節點 1、先決條件 2、安全并配置組件 3、完成安裝 三、安裝和配置計算節點 1、安全并配置組件 2、完成安裝 四、驗證操作 一、計算服務概覽 使用OpenStack計算服務來托管和管理云計算系統。OpenStack計算服務是基礎設施即服務…

2024東北師范大學計算機考研分析

24計算機考研|上岸指南 東北師范大學 信息科學與技術學院位于長春凈月國家高新技術產業開發區,毗鄰風光秀美的凈月潭國家森林公園。 信息科學與技術學院由原“計算機科學與信息技術學院”和“信息與軟件工程學院”于2017年根據學校事業發展需要整合形成。學院設有…

全球三大網絡安全威脅

網絡安全IP數據云 - 免費IP地址查詢 - 全球IP地址定位平臺威脅日益復雜,涵蓋了多個層面,從個人用戶到大型企業,都面臨著不同形式的網絡安全威脅。以下是當前全球范圍內廣泛認可的三大網絡安全威脅: 1. 惡意軟件和病毒攻擊&#x…

【沁恒藍牙mesh】OTA功能詳解

本文基于沁恒CH58X 單片機的OTA功能 一鍵三連,收藏點贊評論 私信可獲取原文 📋 個人簡介 💖 作者簡介:大家好,我是喜歡記錄零碎知識點的小菜鳥。😎📝 個人主頁:歡迎訪問我的 Ethern…

不可錯過的10個即時通訊軟件開發技巧

歡迎來到本文,作為即時通訊軟件開發領域的專家,我將為您分享十個不容錯過的開發技巧。無論您是新手開發者還是有經驗的專業人士,這些技巧都將幫助您實現卓越的即時通訊軟件。讓我們開始吧! 1. 選擇適當的開發平臺 在開始開發之前…

注意:怎么用JMeter操作MySQL數據庫?看完秒懂!

近期用JMeter做接口測試,遇到了一個需要用到數據數據庫的場景:一個關于數據報告的頁面,需要將數據庫里面的數據求和或者取均值之后,展示出來。 如果要斷言的話,需要連接數據庫,通過寫sql語句,將…

jmeter中調用python代碼

1、安裝pyinstaller pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pyinstaller 2、將py腳本打包 pyinstaller -F venv/get_image/OCR_jmeter_api.py 3、jmeter中添加OS Process Sampler并調用dist下的程序 4、執行jmeter

刪除鏈表的倒數第N個結點

題目: 給你一個鏈表,刪除鏈表的倒數第 n 個結點,并且返回鏈表的頭結點。 示例 1: 輸入:head [1,2,3,4,5], n 2 輸出:[1,2,3,5]示例 2: 輸入:head [1], n 1 輸出:…

機器學習實戰-第5章 Logistic回歸

Logistic 回歸 概述 Logistic 回歸 或者叫邏輯回歸 雖然名字有回歸,但是它是用來做分類的。其主要思想是: 根據現有數據對分類邊界線(Decision Boundary)建立回歸公式,以此進行分類。 須知概念 Sigmoid 函數 回歸 概念 假設現在有一些數據點,我們用一條直線對這些點進行…