【Redis-6.0.8】Redis源码分析入门

本文档详细介绍了Redis的源码结构,包括src文件夹下的核心组件,如数据结构、数据类型实现、数据库及持久化、服务端与客户端、复制和哨兵系统。同时,提到了阅读源码的起点,如`server.c`中的`main`函数,以及关键步骤,如设置本地化、内存溢出处理和CRC64表初始化。此外,还简述了代码调试的初步体验。

目录

1.源码概述

1.1 src文件夹下的摘取

1.2 核心代码分布

1.2.1 基本的数据结构

1.2.2 Redis数据类型的底层实现

1.2.3 Redis数据库的实现

1.2.4 Redis服务端和客户端实现

1.2.5 其他

2.阅读的一些小尝试

2.1 服务端的启动点

2.2 服务端的关键步骤

2.2.1 setlocale

2.2.2 设置内存溢出的回调函数

2.2.3 初始化静态区的循环冗余校验表crc64_table

3.代码调试初体验


1.源码概述

1.1 src文件夹下的摘取

微信读书的《Redis5 设计与源码分析》链接

本图引自《Redis5 设计与源码分析》中的1.3节.server.c为服务端程序,redis-cli.c为客户端程序

1.2 核心代码分布

1.2.1 基本的数据结构

(1)动态字符串sds.c
(2)整数集合intset.c
(3)压缩列表ziplist.c
(4)快速链表quicklist.c
(5)字典dict.c
(6)Streams的底层实现结构listpack.c和rax.c

1.2.2 Redis数据类型的底层实现

(1)Redis对象object.c
(2)字符串t_string.c
(3)列表t_list.c
(4)字典t_hash.c
(5)集合及有序集合t_set.c和t_zset.c
(6)数据流t_stream.c

1.2.3 Redis数据库的实现

(1)数据库的底层实现db.c
(2)持久化rdb.c和aof.c

1.2.4 Redis服务端和客户端实现

(1)事件驱动ae.c和ae_epoll.c
(2)网络连接anet.c和networking.c
(3)服务端程序server.c
(4)客户端程序redis-cli.c

1.2.5 其他

(1)主从复制replication.c
(2)哨兵sentinel.c
(3)集群cluster.c
(4)其他数据结构,如hyperloglog.c、geo.c等
(5)其他功能,如pub/sub、Lua脚本

2.阅读的一些小尝试

2.1 服务端的启动点

D:\005-01-代码\001-开源项目源码\007-redis\redis-6.0.8.tar\redis-6.0.8\redis-6.0.8\src\server.c中的main函数

2.2 服务端的关键步骤

2.2.1 setlocale

setlocale()函数的作用

2.2.2 设置内存溢出的回调函数

zmalloc_set_oom_handler(redisOutOfMemoryHandler);

2.2.3 初始化静态区的循环冗余校验表crc64_table

 crc64_init();

3.代码调试初体验

cd /home/muten/module/redis-6.0.9/src(仅仅是我的机器上)
gdb ./redis-server
>l server.c:5097,server.c:5150
>r
>i thread
>thread 1
>bt
>thread 2
>bt
>thread 3
>bt
>thread 4
>bt

<think>好的,我现在需要帮助用户解决在Ubuntu上安装Redis时遇到的pkg-config not found错误。首先,我得回想一下用户提供的引用内容,看看有没有相关的解决方法。用户提到了引用[1]、[2]、[4]中关于安装Redis的步骤和可能出现的错误。 首先,pkg-config是一个用来帮助编译时定位头文件和库文件的工具,很多软件在编译时会依赖它。如果系统里没有安装pkg-config,Redis的编译过程可能会报错。用户提到在Ubuntu上使用apt安装,而之前可能用的是yum,所以需要确认Ubuntu下的正确安装命令。 根据引用[1]中的信息,当出现pkg-config not found时,可能需要安装pkg-config包。在Ubuntu系统中,应该使用apt-get来安装。此外,可能还需要安装其他依赖库,比如libssl-dev,因为Redis可能需要SSL支持,尤其是在新版本中。 接下来,用户提供的引用[2]和[4]提到了下载Redis源码、解压、编译的步骤。如果编译过程中出现错误,可能需要先安装依赖,然后执行make distclean再重新编译。例如,在引用[2]中,建议如果编译错误,先执行make distclean清除之前的编译文件,再重新make。 所以,解决步骤可能是这样的: 1. 安装pkg-config和必要的依赖库。 2. 确保所有依赖都安装完成后,进入Redis源码目录,执行make distclean。 3. 再次尝试编译和安装。 另外,用户提到的权限问题(如Permission denied)可能需要使用sudo来执行安装命令,或者确保当前用户有足够的权限写入目标目录。例如,在make install时可能需要sudo权限,或者将目录权限设置正确。 需要确认用户是否已经正确安装了所有依赖项,包括build-essential、tcl等,这些在编译Redis时也是必要的。引用[4]中的步骤提到了编译Redis源码,但没有提到依赖安装,所以可能需要补充这些步骤。 总结下来,解决方案应该是: - 使用sudo apt-get安装pkg-config和相关开发库。 - 安装Redis所需的其他依赖,如build-essential、tcl、libssl-dev等。 - 清理之前的编译文件,重新编译安装。 同时,提醒用户在安装过程中可能需要使用sudo来处理权限问题,尤其是在执行make install时。</think>### 分步解答 在Ubuntu上解决Redis安装过程中出现的`pkg-config not found`错误,需按以下步骤操作: --- #### **1. 安装pkg-config和基础编译工具** 该工具用于管理编译时依赖关系。运行以下命令: ```bash sudo apt-get update sudo apt-get install pkg-config build-essential ``` - `build-essential`包含GCC编译器、make工具等基础编译环境[^2][^4] --- #### **2. 安装Redis的依赖库** Redis依赖`libssl-dev`(TLS支持)和`tcl`(测试工具): ```bash sudo apt-get install libssl-dev tcl ``` --- #### **3. 清理并重新编译Redis** 若之前编译失败,需先清理残留文件: ```bash cd redis-* # 进入解压后的Redis源码目录 make distclean # 清除之前的编译文件[^2] ``` 重新编译并安装: ```bash make sudo make install # 需要sudo权限写入系统目录 ``` --- #### **4. 验证安装** 检查是否生成关键文件: ```bash ls /usr/local/bin/redis-server # 默认安装路径 ``` 启动Redis服务端测试: ```bash redis-server ``` --- #### **常见问题补充** - **权限问题**:若`make`阶段报`Permission denied`,可能是源码目录权限问题,尝试: ```bash sudo chown -R $USER:$USER . # 将目录所有权赋予当前用户 ``` - **网络问题**:若下载依赖包失败(如`Failed to fetch`),检查APT源配置或更换镜像源[^1] ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值