• Redis4.0源码编译和启动


    环境

    系统:MacBook-Pro
    IDE:Clion

    源码下载

    本博客下载的版本是Redis 4.0
    GitHub - redis/redis at 4.0

    编译准备

    下载完源码后,不要立即导入到IDE中,首先在下列文件夹下创建CMakeLists.txt。

    redis-4.0/CMakeLists.txt

    cmake_minimum_required(VERSION 3.15)
    project(redis-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/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
            )
    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
            )
    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)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115

    redis-4.0/src/modules/CMakeLists.txt

    cmake_minimum_required(VERSION 3.9)
    set(CMAKE_BUILD_TYPE "Debug")
    add_library(helloworld SHARED helloworld.c)
    set_target_properties(helloworld PROPERTIES PREFIX "" SUFFIX ".so")
    
    
    add_library(hellotype SHARED hellotype.c)
    set_target_properties(hellotype PROPERTIES PREFIX "" SUFFIX ".so")
    
    
    add_library(helloblock SHARED helloblock.c)
    set_target_properties(helloblock PROPERTIES PREFIX "" SUFFIX ".so")
    
    
    add_library(testmodule SHARED testmodule.c)
    set_target_properties(testmodule PROPERTIES PREFIX "" SUFFIX ".so")
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    redis-4.0/deps/CMakeLists.txt

    add_subdirectory(linenoise)
    add_subdirectory(lua)
    add_subdirectory(hiredis)
    
    • 1
    • 2
    • 3

    redis-4.0/deps/hiredis/CMakeLists.txt

    add_library(hiredis STATIC
            hiredis.c
            net.c
            dict.c
            net.c
            sds.c
            async.c
            read.c
            )
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    redis-4.0/deps/linenoise/CMakeLists.txt

    add_library(linenoise
            linenoise.c
            )
    
    • 1
    • 2
    • 3

    redis-4.0/deps/lua/CMakeLists.txt

    add_subdirectory(src)
    
    • 1

    make编译

    在redis-4.0目录下执行make命令

    make报错,请查看“解决报错”:
    在这里插入图片描述
    make成功:
    在这里插入图片描述

    解决报错

    从报错信息中可以排查出来,是redis-4.0/src/debug.c这个文件编译不通过,打开这个文件,如下图所示,把这些代码注释掉即可。
    注意:如果提前用IDE打开了项目,解决完报错redis-4.0/src/debug.c后,请删除掉redis-4.0/.idea目录,完成make编译后,再用IDE打开项目,否则IDE可能不会生成Debug的配置,详见“IDE打开项目”。
    在这里插入图片描述

    在这里插入图片描述

    IDE打开项目

    make编译后再用IDE打开项目
    在这里插入图片描述

    这样IDE会出现弹框,帮你生成Debug的配置,如下图,直接点击OK。
    在这里插入图片描述
    点完OK后,发现出现了cmake-build-debug文件夹,并且调试的地方有了redis-cli | Debug

    在这里插入图片描述
    在这里插入图片描述

    启动redis-server

    启动时调试:
    在这里插入图片描述
    启动后控制台:
    在这里插入图片描述

  • 相关阅读:
    电脑安装了ubnutu20.04双系统以后,卡死在grub界面里
    【DP】大厂真题:小红书2023秋招提前批-连续子数组最大和
    ArcGIs创建企业级数据库
    如何解决本地缓存的线程安全问题?
    制作一个简单HTML电影网页设计(HTML+CSS)
    香,一套逻辑轻松且智能解决PyQt中控件数值验证的问题
    【模型提分tricks】Adversarial Weight Perturbation(AWP)对抗训练
    蒲公英路由器如何设置远程打印?
    腾讯云服务器带宽下载速度快吗?多线BGP和CN2高速网络
    Bug战场:C++篇
  • 原文地址:https://blog.csdn.net/qq_30038111/article/details/119987235