Redis源码编译与调试

Redis源码编译与调试Redis 是目前最常用的缓存数据库 C 语言编写的 这里我用 Clion 编译调试 Clion 安装 CLion 是 JetBrains 推出的全新的 C C 跨平台集成开发环境 用来阅读 Redis 源码再合适不过了 函数调用查询 跳转都很方便 从官网下载安装即可 下载源码首先从官网下载源码下载后解压即可 编译 Clion 里用 CMake 编译 因此需要安装 CMake Mac 上直接命令安装即可 brewinstallc 源码有多个模

Redis 是目前最常用的缓存数据库,C语言编写的。这里我用Clion 编译调试。

Clion 安装

CLion 是 JetBrains 推出的全新的 C/C++ 跨平台集成开发环境。用来阅读 Redis 源码再合适不过了。函数调用查询、跳转都很方便。

从官网下载安装即可。

如需激活成功教程,可以参考链接

 

 

下载源码

首先从官网下载源码

下载后解压即可。

 

编译

Clion 里用CMake 编译,因此需要安装 CMake。Mac 上直接命令安装即可

brew install cmake

Redis源码有多个模块,因此要在多个目录下新建 CMakeLists.txt 文件。

一、在 deps/hiredis 目录下 新建 CMakeLists.txt 文件,内容如下:

add_library(hiredis STATIC hiredis.c net.c dict.c sds.c async.c read.c )

二、在 deps/linenoise 目录下 新建 CMakeLists.txt 文件,内容如下:

add_library(linenoise linenoise.c)

 

三、在 deps/lua 目录下 新建 CMakeLists.txt 文件,内容如下:

set(LUA_SRC src/lapi.c src/lcode.c src/ldebug.c src/ldo.c src/ldump.c src/lfunc.c src/lgc.c src/llex.c src/lmem.c src/lobject.c src/lopcodes.c src/lparser.c src/lstate.c src/lstring.c src/ltable.c src/ltm.c src/lundump.c src/lvm.c src/lzio.c src/strbuf.c src/fpconv.c src/lauxlib.c src/lbaselib.c src/ldblib.c src/liolib.c src/lmathlib.c src/loslib.c src/ltablib.c src/lstrlib.c src/loadlib.c src/linit.c src/lua_cjson.c src/lua_struct.c src/lua_cmsgpack.c src/lua_bit.c ) add_library(lua STATIC ${LUA_SRC})

 

四、在 deps 目录下 新建 CMakeLists.txt 文件,内容如下:

add_subdirectory(hiredis) add_subdirectory(linenoise) add_subdirectory(lua)

 

五、在 源码根 目录下新建 CMakeLists.txt 文件,内容如下:

cmake_minimum_required(VERSION 3.0 FATAL_ERROR) project(redis VERSION 4.0) set(CMAKE_BUILD_TYPE "Debug") get_filename_component(REDIS_ROOT "${CMAKE_CURRENT_SOURCE_DIR}" ABSOLUTE) add_subdirectory(deps) add_subdirectory(src/modules) set(SRC_SERVER_TMP src/adlist.c src/ae.c src/anet.c src/ae_kqueue.c src/dict.c src/sds.c src/zmalloc.c src/lzf_c.c src/lzf_d.c src/pqsort.c src/zipmap.c src/sha1.c src/ziplist.c src/release.c src/networking.c src/util.c src/object.c src/db.c src/replication.c src/rdb.c src/t_string.c src/t_list.c src/t_set.c src/t_zset.c src/evict.c src/defrag.c src/module.c src/quicklist.c src/expire.c src/childinfo.c src/redis-check-aof.c src/redis-check-rdb.c src/lazyfree.c src/geohash.c src/rax.c src/geohash_helper.c src/siphash.c src/geo.c src/t_hash.c src/config.c src/aof.c src/pubsub.c src/multi.c src/debug.c src/sort.c src/intset.c src/syncio.c src/cluster.c src/crc16.c src/endianconv.c src/slowlog.c src/scripting.c src/bio.c src/rio.c src/rand.c src/memtest.c src/crc64.c src/bitops.c src/sentinel.c src/notify.c src/setproctitle.c src/blocked.c src/hyperloglog.c src/latency.c src/sparkline.c src/t_stream.c src/lolwut.c src/lolwut5.c src/listpack.c src/localtime.c ) set(SRC_SERVER src/server.c ${SRC_SERVER_TMP}) set(SRC_CLI src/anet.c src/sds.c src/adlist.c src/redis-cli.c src/zmalloc.c src/release.c src/anet.c src/ae.c src/crc64.c src/crc16.c src/dict.c src/siphash.c ) set(EXECUTABLE_OUTPUT_PATH src) link_directories(deps/linenoise/ deps/lua/src deps/hiredis) add_executable(redis-server ${SRC_SERVER}) target_include_directories(redis-server PRIVATE ${REDIS_ROOT}/deps/linenoise PRIVATE ${REDIS_ROOT}/deps/hiredis PRIVATE ${REDIS_ROOT}/deps/lua/src) target_link_libraries(redis-server PRIVATE pthread PRIVATE m PRIVATE lua PRIVATE linenoise PRIVATE hiredis) add_executable(redis-cli ${SRC_CLI}) target_include_directories(redis-cli PRIVATE ${REDIS_ROOT}/deps/linenoise PRIVATE ${REDIS_ROOT}/deps/hiredis PRIVATE ${REDIS_ROOT}/deps/lua/src) target_link_libraries(redis-cli PRIVATE pthread PRIVATE m PRIVATE linenoise PRIVATE hiredis )

 

六、在 源码根 目录 下执行以下命令编译

make test

 

 

导入

打开Clion ,导入项目即可

 

之后选择 “redis-server” ,调试运行即可

Redis源码编译与调试

 

源码解读

Redis 源码文件分布大致如下:

Redis源码编译与调试

各个功能对应的源码文件。当然还有一些算法、工具类的文件,这里没有列。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/233619.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • anchorPoint详解

    anchorPoint详解http://ideveloper.co/understanding-the-anchor-point/   彻底理解position与anchorPointhttp://wonderffee.github.io/blog/2013/10/13/understand-anchorpoint-and-position/  egfjfxt_iityphoonmod…

    2022年10月8日
    0
  • s一般怎么称呼自己的m_“老公、老婆、亲爱的”?快来围观明星怎么称呼自己的另一半!…

    s一般怎么称呼自己的m_“老公、老婆、亲爱的”?快来围观明星怎么称呼自己的另一半!…每个夫妻相处方法不一样,大家怎么称呼习惯就怎么来,官方上会跟别人介绍,我的爱人,我的对象,我的老公,私下也会亲昵的叫baby。今天我们就来说说明星们是怎么称呼自己的另一半的!黄晓明和baby,在家里的时侯,黄晓明就叫baby为小孩儿,听起来是否是就有种自愿吃狗粮的感到?大家都知道,黄晓明是很喜好baby的,对baby也很宠爱,大家说baby演技欠好,黄晓明还赶忙着帮baby措辞。小编记得当初他们两…

    2022年6月23日
    80
  • 前端HTML+CSS面试题汇总一[通俗易懂]

    前端HTML+CSS面试题汇总一[通俗易懂]目录你做的页面在哪些流览器测试过?这些浏览器的内核分别是什么?每个HTML文件里开头都有个很重要的东西,Doctype,知道这是干什么的吗?Quirks模式是什么?它和Standards模式有什么区别div+css的布局较table布局有什么优点?img的alt与title有何异同?strong与em的异同?你能描述一下渐进增强和优雅降级之间的不同吗?为什么利用多个域名来存储网…

    2022年5月31日
    52
  • Lambda 架构[通俗易懂]

    Lambda 架构[通俗易懂]参考文章:大数据处理中的Lambda架构和Kappa架构简介Lambda架构(LambdaArchitecture)是由Twitter工程师南森·马茨(NathanMarz)提出的大数据处理架构。这一架构的提出基于马茨在BackType和Twitter上的分布式数据处理系统的经验。Lambda架构使开发人员能够构建大规模分布式数据处理系统。它具有很好的灵活性和可扩展性,也对硬件故障和人为失误有很好的容错性。Lambda架构总共由三层系统组成:批处理层(BatchL

    2022年6月25日
    39
  • leetcode第一刷_Restore IP Addresses

    leetcode第一刷_Restore IP Addresses

    2022年2月6日
    39
  • linux下快速查找文件

    linux下快速查找文件在使用linux时,经常需要进行文件查找。其中查找的命令主要有find和grep。两个命令是有区的。  区别:(1)find命令是根据文件的属性进行查找,如文件名,文件大小,所有者,所属组,是否为空,访问时间,修改时间等。          (2)grep是根据文件的内容进行查找,会对文件的每一行按照给定的模式(patter)进行匹配查找。       …

    2022年7月26日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号