调试环境搭建(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.mzph.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的错误,这意味着…

基于SSM的旅游民宿预定系统【源码】【运行教程】

基于SSM的旅游民宿预定系统 一、项目介绍1. 游客功能2. 管理员功能3. 高级功能 二、项目技术栈三、项目运行四、项目演示总结 大家好,这里是程序猿代码之路!随着旅游业的快速发展,民宿作为一种独特的住宿方式越来越受到游客的喜爱。为了提升用…

百华鞋业祝莘莘学子旗开得胜,一举夺魁

在知识的海洋中, 有一群人以笔为剑, 在漫长的岁月里不断磨砺, 只为迎接那场人生的重要战役——高考。 高考, 是学子们十几年寒窗苦读的见证, 是他们用奋斗书写青春考卷的舞台。 在这个舞台上, 他们将…

当前主流的App开发技术综述

一、引言 随着移动互联网的蓬勃发展,App(应用程序)已经成为人们日常生活中不可或缺的一部分。无论是社交、购物、娱乐还是工作学习,App都以其便捷、高效和个性化的特点深受用户喜爱。而在这一过程中,App开发技术也在不…

ChatGPT-4o体验demo

OpenAI 最近推出了其最新的人工智能语言模型——GPT-4O。该模型是在原有 GPT-4 的基础上进行优化而成,旨在提升生成质量和响应速度。GPT-4O 采用了更加高效的架构设计,使其在处理复杂文本时表现出更快的速度和更高的准确性。GPT-4O 在训练过程中融入了最…

kafka的leader和follower

leader和follower kafka的leader和follower是相对于分区有意义的,不是相对于broker。 因为每个分区都有leader和follower, leader负责读写数据。 follower负责复制leader的数据保存到自己的日志数据中,并在leader挂掉后重新选举出leader。 kafka会再…

(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 被广泛用作计算…

反射型xss靶场练习

反射型xss危害小,这里使用的xss靶场是常用的xss靶场:xss-labs。 当我们完成弹窗后就通过该关卡,说该关卡存在xss的一个漏洞并且可以解析js代码。 第一关: 这里没有过滤我们输入的代码:直接将js代码放在js代码中&a…

Linux下线程的互斥与同步详解

🤖个人主页:晚风相伴-CSDN博客 💖如果觉得内容对你有帮助的话,还请给博主一键三连(点赞💜、收藏🧡、关注💚)吧 🙏如果内容有误或者有写的不好的地方的话&…

centos7 安装 mysql5.7 LTS

centos7 安装 mysql5.7 LTS 参考: https://blog.csdn.net/EB_NUM/article/details/105425622 可以在运行安装程序之前导入密钥: sudo rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022第一步、下载MySQL 安装包: sudo wget h…

植物大战僵尸杂交版破解C++实现

文章目录 前言准备工作:基地址与偏移UI界面设计和绑定项目模板总览图生成与实现信号处理1、阳光值更新:BTN12、三种钱币值更新:BTN2-BTN43、冷却刷新:BTN54、锁定阳光:check15、无冷却:check26、OnTimer()和OnClose&am…

二开版微交易系统

下载地址:二开版微交易系统

集成学习概述

概述 集成学习(Ensemble learning)就是将多个机器学习模型组合起来,共同工作以达到优化算法的目的。具体来讲,集成学习可以通过多个学习器相结合,来获得比单一学习器更优越的泛化性能。集成学习的一般步骤为:1.生产一组“个体学习…

实战 | YOLOv10 自定义数据集训练实现车牌检测 (数据集+训练+预测 保姆级教程)

导读 本文主要介绍如何使用YOLOv10在自定义数据集训练实现车牌检测 (数据集训练预测 保姆级教程)。 YOLOv10简介 YOLOv10是清华大学研究人员在Ultralytics Python包的基础上,引入了一种新的实时目标检测方法,解决了YOLO以前版本在后处理和模型架构方面…

自动化装箱封箱解决方案:深度探讨其优势及故障处理技巧

在当今这个快节奏、高效率的时代,自动化装箱封箱解决方案以其独特的优势,正逐渐成为物流、仓储等行业的新宠。它不仅能大幅提升作业效率,还能显著降低人工成本,减少人为错误。星派将深度探讨自动化装箱封箱技术的显著优势&#xf…

【Vue】练习-mutations的减法功能

文章目录 一、需求二、完整代码 一、需求 步骤 二、完整代码 Son1.vue <template><div class"box"><h2>Son1 子组件</h2>从vuex中获取的值: <label>{{ $store.state.count }}</label><br><button click"handleA…

C# 界面控件中英切换

编程软件:VS 2015 需求:界面有两个按钮&#xff0c;点击可以将界面上所有控件进行不同语言的切换。 一共两种方案&#xff0c;个人认为第二种方案使用范围更广&#xff08;这里以中英文切换为例&#xff09;。 方案一:如图所示&#xff0c;建立两个资源文件 将所需控件的中英…

海思SS928(SD3403)部署YOLOv5-YOLOv7步骤详解

1. YOLO模型资料 本文档内容以yolov5-7.0工程、yolov5s模型为例。 a. 模型结构 详细的模型结构可以利用netron工具打开.pt或.onnx模型查看。 b. 模型参数即验证结果 其中,YOLOv5n、YOLOv5s、YOLOv5m、YOLOv5l、YOLOv5x为五种类型的预训练模型,其包含的检测类别相…

2024 cicsn ezbuf

文章目录 参考protobuf逆向学习复原结构思路exp 参考 https://www.y4ng.cn/posts/pwn/protobuf/#ciscn-2024-ezbuf protobuf 当时压根不知道用了protobuf这个玩意&#xff0c;提取工具也没提取出来&#xff0c;还是做题做太少了&#xff0c;很多关键性的结构都没看出来是pro…

Unity 集成 FMOD 音频管理插件 2.02

Unity 集成 FMOD 音频管理插件 2.02 3. 集成教程&#xff1a;3.1 设置Unity项目3.2 设置FMOD项目3.3 设置 FMOD for Unity3.4 添加声音&#xff1a;卡丁车引擎3.5 添加声音&#xff1a;氛围3.6 添加声音&#xff1a;音乐3.7 删除现有音频3.8 下一步 10. 脚本 API 参考10.1 基础…