如何用msys2编译最新版redis的Windows版

最近有个需求要用redis一些新特性,比如什么ZMPOP之类的。看了一下开发机上的redis版本居然还在3.x。

虽然我也不会用Windows上生产环境,但是为了redis专门起一个docker或者虚拟机也不太开心。

那还是自己编译吧。

以前我记得我用cygwin编译过redis 5.0.5。cygwin操作还是有点复杂了,不适合给别人教学。今天我们来用个简单的东西:msys2。

以下是编译安装步骤,真的很简单。跟着步骤做总能成功的。

  1. 在msys2的首页下载最新版的msys2。

  2. 安装好后启动msys2(默认位置是C:\msys64\msys2.exe)

    注:如果希望用Windows Terminal启动msys2,配置文件中的可执行文件应该填写C:/msys64/msys2_shell.cmd -defterm -here -no-start -msys

  3. 首先执行pacman -Syu来更新软件包

  4. 安装gcc和make,我们一会用它来编译pacman -S msys/gcc msys/make

    注:如果像我一样使用proxifier代理,你需要代理pacman.exe

  5. 个人比较喜欢vim,这里也装一下,省的一会还要回windows开VSCode。

    pacman -S vim

    然后vim /usr/include/dlfcn.h打开/usr/include/dlfcn.h,我们把49行的__GNU_VISIBLE宏的条件编译给注释掉,记着同时要把下面对应的#endif(在61行)也注释掉。

    如果你vim用的不是很熟练,你可以去msys2的安装目录,你会发现这个文件就在C:\msys64\usr\include里面,用你的VSCode打开它完成编辑。

  6. 准备一下redis的源码。我们来到redis首页,点Download按钮,打开了redis的下载页

    目前最新版本是7.0.2,我们直接点击Download 7.0.2的链接。就可以下载到redis源码。这里建议下最新版,等你进来这个页面的时候7.0.2应该不是最新版了,所以这里不给出链接了。

    下载回来的文件名应该看起来像是redis-7.0.2.tar.gz。我们找个地方解压它。比如我这里选了D:\tmp\redis-7.0.2。(记着选“解压到当前文件夹”,不然你就会解压到D:\tmp\redis-7.0.2\redis-7.0.2

  7. 我们回到msys2的命令行,cd到源码目录去:cd /d/tmp/redis-7.0.2(msys2对于windows盘符的映射是直接映射成根目录下的单字母目录的)

  8. 开始编译make

    编译的过程中会出一大堆警告,不要紧,只要不报错就是没事。

    最后你会看到打印出了Hint: It's a good idea to run 'make test' ;),这就说明编译成功了。

  9. 我们把编译结果导出来。使用make install命令,PREFIX是目标目录,记得用msys2内部的路径

    make PREFIX="/d/Cache/redis" install

    这样我们去D:\Cache\redis\bin就能找到编译结果了。

  10. 然后你双击redis-server.exe发现报错无法运行,这很正常。去C:\msys64\usr\bin复制一个msys-2.0.dll来。然后再双击就能运行了。

  11. 如果报错了怎么办:一般来说是有依赖没装好。查看报错信息看看是啥没装,然后用pacman -S安装一下。回到源码目录,执行make clean,然后回到第8步再来一次。

  12. 记得把/usr/include/dlfcn.h改回去。