zoukankan      html  css  js  c++  java
  • Redis6.x 在Windows上面编译安装的过程

    背景说明


    • 在github上面仅能够找到 redis3.2.100的Windows安装文件
    • 比较新的版本比较难以找到, 同事经常出现这个版本的redis卡死的情况, 所以想尝试进行一下升级.

    第一部分下载文件


    下载 cygwin的安装文件

    https://cygwin.com/setup-x86_64.exe
    
    • 注意:公司里的网速可能会导致不好下载.

    下载redis的安装文件

    https://download.redis.io/releases/redis-6.0.10.tar.gz
    
    • 注意:我用2021.6.25 的最新版本 redis6.2.4 版本进行安装时出现错误提示无法进行安装. 所以退而求其次使用这个版本安装成功了.

    第二部分 cygwin的安装与设置


    双击安装即可.
    image
    注意选择使用Install from internet

    • 需要注意使用 Root directory 需要记住

    • 后续编译的文件也是以这个文件为根目录进行处理的.
      image

    • 下一步的LocalPackagesDirectory 只的是互联网下载的临时路径.
      image

    注意选择互联网安装可以add 一个 阿里云的 默认镜像,不然可能无法安装

    http://mirrors.aliyun.com/cygwin/
    

    image

    • 注意这里需要通过Search 将部分组件添加进来以便进行编译
      需要添加的主要有:
    make,gcc-core,gcc-g++ libgcc1 libgccpp1
    

    image

    • 注意 每一个单独的包都需要单独进行下载然后进行安装不能偷懒.

    • 注意不要全部下载 不然会打爆磁盘

    • 选择完成之后点击下一步进行安装即可
      image

    • 注意 这一步可能会很漫长,需要慢慢等待,有下载和安装的步骤
      image

    • 安装完成之后就可以进行后续的编译操作了

    • 安装完只有大概下载120m的文件,安装完大约 600m磁盘大小


    第三步 编译安装redis


    • 启动cygwin 注意 可以选择第一步里面选择的root 路径直接双击bat文件即可.
      image

    • 双击bat 就会在 此路径下的 home 创建当前用户的一个目录名

    • 可以讲redis的tar包放进来, 这里我使用最新版,验证错误内容.
      image

    • 进行解压缩和安装处理

    tar -zxvf redis-6.2.4.tar.gz
    cd redis-6.2.4
    make
    

    就会进入编译过程截图如下:
    image

    注意: 这个版本会报错

    debug.c: 在函数‘dumpX86Calls’中:
    debug.c:1751:5: 错误:未知的类型名‘Dl_info’
     1751 |     Dl_info info;
          |     ^~~~~~~
    debug.c:1761:13: 警告:implicit declaration of function ‘dladdr’; did you mean ‘s_addr’? [-Wimplicit-function-declaration]
     1761 |         if (dladdr((void*)target, &info) != 0 && info.dli_sname != NULL) {
          |             ^~~~~~
          |             s_addr
    debug.c:1761:54: 错误:在非结构或联合中请求成员‘dli_sname’
     1761 |         if (dladdr((void*)target, &info) != 0 && info.dli_sname != NULL) {
          |                                                      ^
    debug.c:1763:63: 错误:在非结构或联合中请求成员‘dli_sname’
     1763 |                 printf("Function at 0x%lx is %s
    ",target,info.dli_sname);
          |                                                               ^
    debug.c: 在函数‘dumpCodeAroundEIP’中:
    debug.c:1772:5: 错误:未知的类型名‘Dl_info’
     1772 |     Dl_info info;
          |     ^~~~~~~
    In file included from debug.c:31:
    debug.c:1781:17: 错误:在非结构或联合中请求成员‘dli_sname’
     1781 |             info.dli_sname, info.dli_saddr, info.dli_fname, info.dli_fbase,
          |                 ^
    server.h:2735:27: 附注:in definition of macro ‘serverLog’
     2735 |         _serverLog(level, __VA_ARGS__);
          |                           ^~~~~~~~~~~
    debug.c:1781:33: 错误:在非结构或联合中请求成员‘dli_saddr’
     1781 |             info.dli_sname, info.dli_saddr, info.dli_fname, info.dli_fbase,
          |                                 ^
    server.h:2735:27: 附注:in definition of macro ‘serverLog’
     2735 |         _serverLog(level, __VA_ARGS__);
          |                           ^~~~~~~~~~~
    debug.c:1781:49: 错误:在非结构或联合中请求成员‘dli_fname’
     1781 |             info.dli_sname, info.dli_saddr, info.dli_fname, info.dli_fbase,
          |                                                 ^
    server.h:2735:27: 附注:in definition of macro ‘serverLog’
     2735 |         _serverLog(level, __VA_ARGS__);
          |                           ^~~~~~~~~~~
    debug.c:1781:65: 错误:在非结构或联合中请求成员‘dli_fbase’
     1781 |             info.dli_sname, info.dli_saddr, info.dli_fname, info.dli_fbase,
          |                                                                 ^
    server.h:2735:27: 附注:in definition of macro ‘serverLog’
     2735 |         _serverLog(level, __VA_ARGS__);
          |                           ^~~~~~~~~~~
    debug.c:1782:17: 错误:在非结构或联合中请求成员‘dli_saddr’
     1782 |             info.dli_saddr);
          |                 ^
    server.h:2735:27: 附注:in definition of macro ‘serverLog’
     2735 |         _serverLog(level, __VA_ARGS__);
          |                           ^~~~~~~~~~~
    debug.c:1783:44: 错误:在非结构或联合中请求成员‘dli_saddr’
     1783 |         size_t len = (long)eip - (long)info.dli_saddr;
          |                                            ^
    debug.c:1789:38: 错误:在非结构或联合中请求成员‘dli_saddr’
     1789 |             void *base = (void *)info.dli_saddr;
          |                                      ^
    make[1]: *** [Makefile:368:debug.o] 错误 1
    make[1]: 离开目录“/home/Administrator/redis-6.2.4/src”
    make: *** [Makefile:6:all] 错误 2
    

    网上没找到方法

    • 换成 redis6.0.10 之后就可以了.
    • 可以看一下编译时间
      image

    第四步 启动验证


    • 需要在 redis-6.0.10/src 里面讲 所有的二进制文件抽取出来

    • 需要在cygwin 的bin 目录下面的 cygwin1.dll 这个文件一起放到一个特定的路径里面

    • 需要在redis的目录里面讲redis.conf 同时copy过来便于使用.
      image

    • 注意 需要修改redis.conf 内的密码
      image

    为了简单起见可以讲 deamonize 打开

    修改配置节
    daemonize yes
    

    可以创建一个配置文件用来一键启动redis

    在上一层目录创建文件
    redis.bat
    内容为:

    taskkill /im redis-server.exe /F
    cd redis
    redis-server.exe redis.conf
    

    image

    进行启动验证

    image

    可以找人进行其他验证了.

  • 相关阅读:
    网络通信socket连接数上限
    图像轮廓的提取
    C# 基础类型的快速转换
    十大编程算法助程序员走上高手之路
    椭圆的曲线模拟
    覆盖父类方法的new和override关键字
    BackgroundWorker异步更新界面
    小程序开发(七)利用SQL实现access_token的自动通知
    漫水填充(泛洪填充、油漆桶)的C#实现(解决堆溢出问题)
    SQL中获取最近的N个半年度
  • 原文地址:https://www.cnblogs.com/jinanxiaolaohu/p/14929647.html
Copyright © 2011-2022 走看看