调试环境搭建(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.rhkb.cn/news/347175.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

公司面试题总结(二)

7. 说说 JavaScript 中的数据类型?存储上的差别? • 基本类型: o Number o String o Boolean o Undefined o null o symbol • 引用类型 o Object o Array o Function • 声明变量时不同的内存地址分配: o 简单类型的…

Excel最基本的常用函数

最基本最常用的函数,掌握了可以解决大部分问题。 (笔记模板由python脚本于2024年06月11日 19:05:56创建,本篇笔记适合熟悉excel的coder翻阅) 【学习的细节是欢悦的历程】 Python 官网:https://www.python.org/ Free:大咖免费“圣…

小白学RAG:大模型 RAG 技术实践总结

节前,我们组织了一场算法岗技术&面试讨论会,邀请了一些互联网大厂朋友、今年参加社招和校招面试的同学。 针对大模型技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备面试攻略、面试常考点等热门话题进行了深入的讨论。 汇总合集…

【设计模式】行为型设计模式之 策略模式学习实践

介绍 策略模式(Strategy),就是⼀个问题有多种解决⽅案,选择其中的⼀种使⽤,这种情况下我们 使⽤策略模式来实现灵活地选择,也能够⽅便地增加新的解决⽅案。⽐如做数学题,⼀个问题的 解法可能有…

【STM32】基于I2C协议的OLED显示(利用U82G库)

【STM32】基于I2C协议的OLED显示(利用U82G库) 文章目录 【STM32】基于I2C协议的OLED显示(利用U82G库)一、实验背景二、U8g2介绍(一)获取(二)简介 三、实践(一)CubexMX配置(二)U8g2配…

SPSS 27.0.1 IF026 软件安装教程

软件介绍 SPSS是一款统计产品与服务解决方案的软件,最初软件全称为“社会科学统计软件包”(SolutionsStatistical Package for the Social Sciences) 下载链接 https://pan.quark.cn/s/fb683999be3e 安装步骤 1、双击运行点击解压 2、进入解压后文件 3、右键管…

流批一体计算引擎-9-[Flink]中的数量窗与时间窗

1 数量窗 1.1 数量滚动窗口 0基础学习PyFlink——个数滚动窗口(Tumbling Count Windows) 1.1.1 代码分析 Tumbling Count Windows是指按元素个数计数的滚动窗口。 滚动窗口是指没有元素重叠的窗口。 (1)构造了一个KeyedStream,用于存储word_count_data中的数据。…

铸铁机械5G智能工厂工业物联数字孪生平台,推进制造业数字化转型

铸铁机械5G智能工厂工业物联数字孪生平台,推进制造业数字化转型。工业物联数字孪生平台以5G技术为基础,通过工业物联网连接铸铁机械生产过程中的各个环节,运用数字孪生技术构建虚拟工厂,实现生产过程的实时监测、模拟与优化&#…

【因果推断python】28_面板数据和固定效应2

目录 固定效应 固定效应 为了方面后面更正式地讲述,让我们首先看一下我们拥有的数据。按照我们的例子,我们将尝试估计婚姻对收入的影响。我们的数据包含多年以来多个个体 (nr) 的这两个变量,married 和lwage。请注意,工资采用对数…

java之IO流和集合框架的笔记

1 File类的使用 1.1 概述 File类及本章下的各种流,都定义在java.io包下。 一个File对象代表硬盘或网络中可能存在的一个文件或者文件目录(俗称文件夹),与平台无关。(体会万事万物皆对象) File 能新建、删…

10_Transformer预热---注意力机制(Attention)

1.1 什么是注意力机制(attention) 注意力机制(Attention Mechanism)是一种在神经网络中用于增强模型处理特定输入特征的能力的技术。它最早被应用于自然语言处理(NLP)任务中,特别是在机器翻译中,如Google的…

Shell脚本和变量

文章目录 Shell脚本shell的解释器Shell的作用Shell脚本的构成Shell的执行方式 重定向操作变量变量的类型:变量名的规范变量值的规范整数运算 + - / %小数运算 小数运算 Shell脚本 脚本就是可运行的代码的集合,脚本语言&#xff…

hadoop_概念

前言: 本篇文章仅用于个人学习笔记,仅限于参考,内容如有侵权,请联系删除,谢谢! 一:大数据简介 大数据概念 : 指无法在一定时间范围内用常规软件工具进行捕管理和处理的数据集合,…

30岁迷茫?AI赛道,人生新起点

前言 30岁,对于许多人来说,是一个人生的分水岭。在这个年纪,有些人可能已经在某个领域取得了不小的成就,而有些人则可能开始对未来的职业方向感到迷茫。如果你正处于这个阶段,那么你可能会问自己:30岁转行…

lubuntu / ubuntu 配置静态ip

一、查看原始网络配置信息 1、获取网卡名称 ifconfig 2、查询网关IP route -n 二、编辑配置文件 去/etc/netplan目录找到配置文件,配置文件名一般为01-network-manager-all.yaml sudo vim /etc/netplan/01-network-manager-all.yaml文件打开后内容如下 # This …

美团强势领涨恒指,港股即将迎来触底反弹?

恒指早间低开低走,持续低位徘徊,一度试探万八关口,最低见17994点,市场情绪表现疲弱,大型科技股普遍走低,但主要指数午后回升,恒生科技指数率先转涨,美团(3690.HK)涨超4%领涨成分股&a…

网络数据库后端相关面试题(其三)

18, 传输控制协议tcp和用户数据报协议udp有哪些区别 第一,tcp是面向字节流的,基本的传输单位是tcp报文段;而udp是面向报文的,基本传输单位是用户数据报。 第二, tcp注重安全可靠性,连接双方在…

1997-2022年各省农村居民人均可支配收入数据(无缺失)

1997-2022年各省农村居民人均可支配收入数据(无缺失) 1、时间:1997-2022年 2、来源:国家统计局、统计年鉴 3、范围:31省 4、指标:农村居民人均可支配收入 5、缺失情况:无缺失 6、指标解释…

数据结构---力扣225.用队列实现栈(C

1.链接:. - 力扣(LeetCode)【点击即可跳转】 思路: 栈 是 后进先出 队列 是 先进先出 (始终保持一个队列为空的思路) 入数据: 往 不为空的队列 中入 出数据: 把不为空的队列数…

Java使用Hutool工具类轻松生成验证码

一、效果展示 二、Hutool工具类实现验证码生成 2.1 引入依赖 <!--hutool工具包--> <dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.7.15</version> </dependency2.2 简单实现方…