調試環境搭建(Redis 6.X 版本)

今兒,我們來搭建一個 Redis 調試環境,目標是:

  • 啟動 Redis Server ,成功斷點調試 Server 的啟動過程。
  • 使用 redis-cli 啟動一個 Client 連接上 Server,并使用 get key 指令,發起一次 key 的讀取。
    視頻可見 B 站:https://www.bilibili.com/video/BV12X4y1c79z

依賴工具

CLion

下載地址:https://www.jetbrains.com/clion
CLion 是 Jetbrains 團隊提供的 C/C++ 開發工具。所以,所以和我們平時使用的 IDEA 差別不大。
這里使用的是 CLion 版本是 2021.1.3 。

源碼拉取

使用 CLion 從官方倉庫 https://github.com/antirez/redis 克隆項目。操作如下圖所示:
gitee
在這里插入圖片描述
這里,我們使用的 Redis 版本是 6.2.5。

導入項目

克隆完項目后,CLion 會進行 Importing 導入項目,耐心等待一下。如下圖所示:
在這里插入圖片描述

編譯項目

導入完成后,打開 Makefile 文件,點擊 default:all 綠色箭頭,開始項目的編譯。如下圖所示:
在這里插入圖片描述

運行 Redis Server

① 配置 Redis Server 的啟動項,操作如下圖所示:
在這里插入圖片描述在這里插入圖片描述
② 打開server.c文件,在 #main(...) 方法上,添加一個方法斷點,它是 Redis Server 的啟動入口。如下圖所示:
在這里插入圖片描述
③ Debug 右上方的 redis-server 啟動項,成功進入 #main(…) 方法的斷點。如下圖所示:

在這里插入圖片描述
至此,我們已經完成了我們的第一個小目標“啟動 Redis Server ,成功斷點調試 Server 的啟動過程”。

點擊左下方的綠色小箭頭,恢復 Redis Server 的啟動,不然等會 Redis Client 都連接不上來。在 CLion 的控制臺,我們會看到 Redis Server 啟動成功的日志如下:

22315:M 28 Jul 2021 01:23:37.535 # Server initialized
22315:M 28 Jul 2021 01:23:37.535 * Ready to accept connections
運行 Redis Client

① 打開 ae.c 文件,在 #aeProcessEvents(...) 方法的如圖處,打上一個端點,用于調試 Redis Server 處理各種來自 Redis Client 的 IO 事件。如下圖所示:
在這里插入圖片描述
② 打開 IDE Terminal,運行 redis-cli 啟動一個 Redis Client,連接上 Redis Server。如下圖所示:
在這里插入圖片描述
此時,我們在 ae.c #aeProcessEvents(...)的斷點成功進入,Redis Server 收到 Redis Client 的連接事件。

打開 Debug 窗口,點擊左下方的綠色小箭頭,恢復 Redis Server 的執行。

③ 回到redis-cli命令行,輸入 get key 指令,向 Redis Server 發起一次 get 請求。效果如下圖所示:
在這里插入圖片描述
此時,我們在 ae.c #aeProcessEvents(...) 的斷點又一次進入,Redis Server 收到 Redis Client 的 get 請求。

至此,我們已經完成了我們的第二個小目標“使用 redis-cli 啟動一個 Client 連接上 Server,并使用 get key 指令,發起一次 key 的讀取”。

源碼解析

Redis 源碼是使用 C 實現的,對于 Java 程序員的我們來說,還是有一定“門檻”的,所以最好借助下市面上 Redis 相關的書籍。
① 《Redis 設計與實現》,針對 Redis 3.X 版本,豆瓣評分 8.6 分,對應詳細注釋的 Redis 倉庫 鏈接: https://pan.baidu.com/s/1I-TtD22NRnBZiKBIURYr7w 提取碼: wfdm
② 《Redis5設計與源碼分析》,針對 Redis 5.X 版本,豆瓣評分 6.8 分。
鏈接: https://pan.baidu.com/s/1y3Kjwi70h2PiHoIctmBJgw 提取碼: stah
③ 《Redis源碼剖析與實戰》,針對 Redis 版本不詳,極客時間 2021 年出的,可能是 Redis 6.X 版本。
④ 《Redis核心技術與實戰》

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

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

相關文章

【python解決】查詢報%d format: a number is required, not str問題

【Python解決】查詢報%d format: a number is required, not str問題 在Python中,字符串格式化是一種常見的操作,用于創建包含變量的字符串。如果你在使用%操作符進行格式化時遇到了%d format: a number is required, not str的錯誤,這意味著…

C# 集合(二) —— List/Queue類

總目錄 C# 語法總目錄 集合二 List/Queue 1. List2. Queue 1. List List有ArrayList和LinkedList ArrayList 類似數組,查找快,插入刪除慢(相對)LinkedList 類似雙向鏈表,查找慢(相對),插入刪除快 //ArrayList //ArrayList Arr…

ts和js有什么不同

TypeScript(簡稱TS)和JavaScript(簡稱JS)之間的主要區別可以歸納為以下幾點: 類型系統: JS:是一種弱類型、動態類型的語言,變量的類型在運行時確定,沒有靜態類型選項。T…

基于SSM的旅游民宿預定系統【源碼】【運行教程】

基于SSM的旅游民宿預定系統 一、項目介紹1. 游客功能2. 管理員功能3. 高級功能 二、項目技術棧三、項目運行四、項目演示總結 大家好,這里是程序猿代碼之路!隨著旅游業的快速發展,民宿作為一種獨特的住宿方式越來越受到游客的喜愛。為了提升用…

百華鞋業祝莘莘學子旗開得勝,一舉奪魁

在知識的海洋中, 有一群人以筆為劍, 在漫長的歲月里不斷磨礪, 只為迎接那場人生的重要戰役——高考。 高考, 是學子們十幾年寒窗苦讀的見證, 是他們用奮斗書寫青春考卷的舞臺。 在這個舞臺上, 他們將…

當前主流的App開發技術綜述

一、引言 隨著移動互聯網的蓬勃發展,App(應用程序)已經成為人們日常生活中不可或缺的一部分。無論是社交、購物、娛樂還是工作學習,App都以其便捷、高效和個性化的特點深受用戶喜愛。而在這一過程中,App開發技術也在不…

周末總結(2024/06/08)

工作 人際關系核心實踐: 要學會隨時回應別人的善意。執行時間控制在5分鐘以內 堅持每天早會打招呼 遇到接不住的話題時拉低自己,抬高別人(無陰陽氣息) 工作上的要點 現狀(接受破爛現狀,改變狀態) - 和老師溝通過&…

ChatGPT-4o體驗demo

OpenAI 最近推出了其最新的人工智能語言模型——GPT-4O。該模型是在原有 GPT-4 的基礎上進行優化而成,旨在提升生成質量和響應速度。GPT-4O 采用了更加高效的架構設計,使其在處理復雜文本時表現出更快的速度和更高的準確性。GPT-4O 在訓練過程中融入了最…

一些關于機器學習的思路和猜測

一、機器學習能做什么 1、網上說機器學習就是根據已有的圖片、文字、視頻資料,建立一個數據庫,用一個處理算法,把已有的資料進行提取關鍵特征和一些聯系,存入數據庫中。 2、當學習到一定程度,就能跟人一樣到實際場景…

kafka的leader和follower

leader和follower kafka的leader和follower是相對于分區有意義的,不是相對于broker。 因為每個分區都有leader和follower, leader負責讀寫數據。 follower負責復制leader的數據保存到自己的日志數據中,并在leader掛掉后重新選舉出leader。 kafka會再…

pinia 重置狀態插件

一、前言 測試提出,登出登錄后,再次進入頁面后。頁面的查詢項非初始狀態。檢查后發現,是因為查詢項的值存到了store呢,從store中獲取,故需要一個重置store的方法 二、pinia 查閱pinia官網后,發現pinia提…

請求分頁存儲管理方式

目錄 請求分頁中的硬件支持 1. 請求頁表機制 2. 缺頁中斷機構 硬件支持的詳細工作流程 示例代碼 請求分頁中的內存分配 最小物理塊數的確定 分配方式 分配公平性 請求分頁存儲管理方式中的內存分配策略 具體示例 頁面調入策略 最近最久未使用(LRU, Leas…

(2024,Vision-LSTM,ViL,xLSTM,ViT,ViM,雙向掃描)xLSTM 作為通用視覺骨干

Vision-LSTM: xLSTM as Generic Vision Backbone 公和眾與號:EDPJ(進 Q 交流群:922230617 或加 VX:CV_EDPJ 進 V 交流群) 目錄 0. 摘要 2 方法 3 實驗 3.1 分類設計 4 結論 0. 摘要 Transformer 被廣泛用作計算…

linux常用操作命令匯總

各個軟件安裝步驟流程 jdk 鏈接: mysql 鏈接: redis 要查詢 Linux 上各個應用程序占用的內存 要查詢 Linux 上各個應用程序占用的內存,可以使用 top 或 ps 命令結合其他工具來實現。下面介紹兩種方法 方法一:使用 top 命令 打…

Access數據中的SQL偏移注入

使用場景: 目標數據表的字段較多,無法一一獲取的時候,嘗試使用偏移注入的方式實現SQL注入。 原理: 例如:一個表有6個字段,而你想獲取的目標表admin的字段不知道,此時可以使用聯合查詢的方式獲…

反射型xss靶場練習

反射型xss危害小,這里使用的xss靶場是常用的xss靶場:xss-labs。 當我們完成彈窗后就通過該關卡,說該關卡存在xss的一個漏洞并且可以解析js代碼。 第一關: 這里沒有過濾我們輸入的代碼:直接將js代碼放在js代碼中&a…

12、架構-流量治理之服務容錯

概述 容錯性設計(Design for Failure)是微服務的另一個核心原 則,也是筆者書中反復強調的開發觀念轉變。不過,即使已經有一定 的心理準備,大多數首次將微服務架構引入實際生產系統的開發者, 在服務發…

web前端 麥子學院:探索前端技術的無盡奧秘

web前端 麥子學院:探索前端技術的無盡奧秘 在數字化浪潮洶涌的時代,Web前端技術作為連接用戶與互聯網的橋梁,正以其獨特的魅力吸引著無數開發者。麥子學院,作為前端技術學習的殿堂,為我們提供了深入探索前端技術的寶貴…

Linux下線程的互斥與同步詳解

🤖個人主頁:晚風相伴-CSDN博客 💖如果覺得內容對你有幫助的話,還請給博主一鍵三連(點贊💜、收藏🧡、關注💚)吧 🙏如果內容有誤或者有寫的不好的地方的話&…

android:text 總為大寫字母的原因

當設置某個 Button 的 text 為英文時&#xff0c;界面上顯示的是該英文的大寫形式&#xff08;uppercase&#xff09;。例如&#xff1a; <Buttonandroid:id"id/btn"android:layout_width"wrap_content"android:layout_height"wrap_content"…