调试环境搭建(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核心技术与实战》
相关文章:
调试环境搭建(Redis 6.X 版本)
今儿,我们来搭建一个 Redis 调试环境,目标是: 启动 Redis Server ,成功断点调试 Server 的启动过程。使用 redis-cli 启动一个 Client 连接上 Server,并使用 get key 指令,发起一次 key 的读取。 视频可见…...
postgres数据库报错无法写入文件 “base/pgsql_tmp/pgsql_tmp215574.97“: 设备上没有空间
解决思路: base/pgsql_tmp下临时表空间不够 需要新建一个临时表空间指定到根目录之外的其他目录 并且修改默认临时表空间参数 解决方法: select * from pg_settings where name temp_tablespaces;mkdir /home/postgres/tbs_tmp CREATE TABLESPACE tbs_t…...
力扣2762. 不间断子数组
力扣2762. 不间断子数组 multiset法 multiset:元素从小到大排序 begin()返回头指针 (最小)rbegin()返回尾指针 (最大) class Solution {public:long long continuousSubarrays(vector<int>& nums) {int n nums.size();long long res 0;multiset<…...
OpenCV学习(4.8) 图像金字塔
1.目的 在这一章当中, 我们将了解图像金字塔。我们将使用图像金字塔创建一个新的水果,“Orapple”我们将看到这些功能: cv.pyrUp() , cv.pyrDown() 在通常情况下我们使用大小恒定…...
【TB作品】msp430f5529单片机,dht22,温湿度传感器,OLED显示屏
使用DHT22温湿度传感器和OLED显示屏的单片机项目 博客名称 利用MSP430单片机读取DHT22并显示温湿度 作品功能 本项目利用MSP430单片机读取DHT22温湿度传感器的数据,并将温湿度信息显示在OLED显示屏上。通过这个项目,您可以学习如何使用单片机与传感器…...
Kotlin 异常处理
文章目录 什么是异常抛出异常通过异常信息解决异常捕获异常 什么是异常 我们在运行程序时,如果代码出现了语法问题或逻辑问题,会导致程序编译失败或退出,称为异常。运行结果会给出一个一长串的红色字,通常会给出异常信息…...
nltk下载报错
捣鼓voice_clone时报错: 报错信息: mport nltk nltk.download(‘cmudict’)For more information see: https://www.nltk.org/data.htmlAttempted to load tokenizers/punkt/PY3/english.pickleSearched in: - ‘/home/zhangshuai/nltk_data’ - ‘/hom…...
Vulnhub-DC5
靶机IP:192.168.20.139 kaliIP:192.168.20.128 网络有问题的可以看下搭建Vulnhub靶机网络问题(获取不到IP) 信息收集 nmap扫下端口及版本 dirsearch扫下目录 LinuxphpNginx 环境 我们再去看前端界面,发现在contact界面有能提交的地方,但是经过测试不…...
pytorch 笔记:pytorch 优化内容(更新中)
1 Tensor创建类 1.1 直接创建Tensor,而不是从Python或Numpy中转换 不要使用原生Python或NumPy创建数据,然后将其转换为torch.Tensor直接用torch.Tensor创建或者直接:torch.empty(), torch.zeros(), torch.full(), torch.ones(), torch.…...
vue 创建一个新项目 以及 手动配置选项
【Vue】3.0 项目创建 自定义配置_vue3.0-CSDN博客...
c#快速获取超大文件夹文件名
c#快速获取超大文件夹文件名 枚举集合速度快:(10万个文件) //by txwtech IEnumerable<string> files2 Directory.EnumerateFiles("d:\aa", "*.xml", SearchOption.TopDirectoryOnly);//过滤指定查询xml文件 慢: var fi…...
华为OD技术面试-最小异或-2024手撕代码真题
题目:最小异或 给你两个正整数 num1 和 num2 ,找出满足下述条件的正整数 x : x 的置位数和 num2 相同,且 x XOR num1 的值 最小 注意 XOR 是按位异或运算。 返回整数 x 。题目保证,对于生成的测试用例, x 是 唯一确定 的。 整数的 置位数 是其二进制表示中 1 的数目。 示…...
基于SpringBoot+Vue单位考勤系统设计和实现(源码+LW+调试文档+讲解等)
💗博主介绍:✌全网粉丝1W,CSDN作者、博客专家、全栈领域优质创作者,博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌💗 🌟文末获取源码数据库🌟 感兴趣的可以先收藏起来,还…...
Anaconda软件:安装、管理python相关包
Anaconda的作用 一个python环境中需要有一个解释器, 和一个包集合. 解释器: 根据python的版本大概分为2和3. python2和3之间无法互相兼容, 也就是说用python2语法写出来的脚本不一定能在python3的解释器中运行. 包集合:包含了自带的包和第三方包, 第三…...
pinia 重置状态插件
一、前言 测试提出,登出登录后,再次进入页面后。页面的查询项非初始状态。检查后发现,是因为查询项的值存到了store呢,从store中获取,故需要一个重置store的方法 二、pinia 查阅pinia官网后,发现pinia提…...
一千题,No.0049(跟奥巴马一起编程)
美国总统奥巴马不仅呼吁所有人都学习编程,甚至以身作则编写代码,成为美国历史上首位编写计算机代码的总统。2014 年底,为庆祝“计算机科学教育周”正式启动,奥巴马编写了很简单的计算机代码:在屏幕上画一个正方形。现在…...
《python程序语言设计》2018版第5章第46题均值和标准方差-上部(我又一次被作者的出题击倒)
第N次被作者打倒了,第5章46题解题上集的记录 计算均值的代码段 step_num 0num_c 0 pow_c 0 while step_num < 10:a eval(input("Enter number is: "))num_c apow_c pow(a, 2)step_num 1 t2 num_c / 10这个结果和书里的答案差一点。书里写的是…...
自己做的精灵图制作,图片合成,卓宠,窗口置顶,磁力链下载等工具软件
欢迎使用和提bug,才v1.0.2,有新奇的自己需要的功能可以提给我,我看看能不能做。 网站地址 github...
C++协程
什么是协程 协程(Coroutine)是程序组件,可以在执行过程中暂停并在稍后继续执行。与传统的子例程(如函数或过程)不同,子例程一旦调用,必须等其返回后才能继续执行调用它的代码。协程则可以在执行…...
linux系统——ping命令
ping命令可以用来判断对远端ip的连通性,可以加域名也可以加公共ip地址 这里发送出56字节,返回64字节...
测试微信模版消息推送
进入“开发接口管理”--“公众平台测试账号”,无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息: 关注测试号:扫二维码关注测试号。 发送模版消息: import requests da…...
手游刚开服就被攻击怎么办?如何防御DDoS?
开服初期是手游最脆弱的阶段,极易成为DDoS攻击的目标。一旦遭遇攻击,可能导致服务器瘫痪、玩家流失,甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案,帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...
Ubuntu系统下交叉编译openssl
一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机:Ubuntu 20.04.6 LTSHost:ARM32位交叉编译器:arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...
CentOS下的分布式内存计算Spark环境部署
一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架,相比 MapReduce 具有以下核心优势: 内存计算:数据可常驻内存,迭代计算性能提升 10-100 倍(文档段落:3-79…...
Spring AI与Spring Modulith核心技术解析
Spring AI核心架构解析 Spring AI(https://spring.io/projects/spring-ai)作为Spring生态中的AI集成框架,其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似,但特别为多语…...
【Oracle】分区表
个人主页:Guiat 归属专栏:Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...
面向无人机海岸带生态系统监测的语义分割基准数据集
描述:海岸带生态系统的监测是维护生态平衡和可持续发展的重要任务。语义分割技术在遥感影像中的应用为海岸带生态系统的精准监测提供了有效手段。然而,目前该领域仍面临一个挑战,即缺乏公开的专门面向海岸带生态系统的语义分割基准数据集。受…...
LangChain知识库管理后端接口:数据库操作详解—— 构建本地知识库系统的基础《二》
这段 Python 代码是一个完整的 知识库数据库操作模块,用于对本地知识库系统中的知识库进行增删改查(CRUD)操作。它基于 SQLAlchemy ORM 框架 和一个自定义的装饰器 with_session 实现数据库会话管理。 📘 一、整体功能概述 该模块…...
【无标题】路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论
路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论 一、传统路径模型的根本缺陷 在经典正方形路径问题中(图1): mermaid graph LR A((A)) --- B((B)) B --- C((C)) C --- D((D)) D --- A A -.- C[无直接路径] B -…...
如何配置一个sql server使得其它用户可以通过excel odbc获取数据
要让其他用户通过 Excel 使用 ODBC 连接到 SQL Server 获取数据,你需要完成以下配置步骤: ✅ 一、在 SQL Server 端配置(服务器设置) 1. 启用 TCP/IP 协议 打开 “SQL Server 配置管理器”。导航到:SQL Server 网络配…...
