[转帖]编译实战 | 手摸手教你在Windows环境下运行Redis6.x

编译,实战,摸手,windows,环境,运行,redis6 · 浏览次数 : 0

小编点评

**编译Windows版Redis6.x版本** **工具介绍:** * Cygwin:GNU和开源工具的大型集合,提供类似于在Windows上运行linux发行版的模拟环境功能。 **编译步骤:** 1. 下载并安装Cygwin软件。 2. 获取redis6.0.16的源码。 3. 在Cygwin的安装路径的home目录下创建以你登录系统的用户名来命名的目录。 4. 解压缩下载完成后的压缩包。 5. 在Cygwin命令行中切换到解压后的根目录,执行编译和安装命令。 6. 启动redis服务。 **注意:** *编译过程可能很缓慢,约20分钟左右。 * 如果遇到错误,可以查看日志文件以获取更多信息。 * 可将编译好的Windows版redis6.0.16上传到网盘,方便后续获取。

正文

原创:微信公众号 码农参上,欢迎分享,转载请保留出处。

哈喽大家好啊,我是没事就愿意瞎捣鼓的Hydra。

不知道有没有小伙伴像我一样,平常开发中用的是windows操作系统,有时候想装点什么软件,一看只支持linux系统,无奈要么启动虚拟机、要么装在云服务器上。

这不前几天又是这样,刚想用一下Redis 6.x版本来尝试一下新特性,打开官网一看,好家伙我直呼内行,果然不支持windows系统:

不过虽然redis的官网上不提供windows版本下载,但是这也难不倒我这个面向百度编程的小能手,一番查找后让我找到了微软在github上维护的几个可以在windows上运行的redis版本:

项目的git地址是 https://github.com/MicrosoftArchive/redis/releases,我翻了一下,微软维护了2.x3.x的多个windows版本redis,不过比较遗憾,在维护到3.0.504正式版本后就放弃了更新。

不过问题不大,眼看微软撂挑子不干了,波兰的热心市民 Tomasz Poradowski 先生这时候站出来,继续开始提供可以在windows上运行的4.x5.x版本的redis,并且从2017年到2022年一干就是5年。

3

项目git地址是https://github.com/tporadowski/redis/releases,没错,其实我本地环境运行的redis-5.0.9就是以前从这里下载的,而且绿色版使用起来真的是干净又卫生,所以我强烈建议大家给这位老哥来一个Star支持一下。

不过绕了这么一大圈,我的问题还是没有解决啊,既然没有现成的可以在windows上运行的redis6.x版本,那我们干脆就来自己编译一个吧。

初识Cygwin

首先介绍一下我们今天要用到的工具Cygwin,先简单看一下它的官网 https://cygwin.com/,上面很清晰的解释了几个容易引起大家混淆的问题:

15

先解释了cygwin是什么:

  • cygwin是GNU和开源工具的大型集合,它提供了类似于在windows上运行linux发行版的模拟环境功能
  • cygwin是一个动态链接库cygwin1.dll,它提供了大量POSIX的API功能

再纠正了大家的常见误区:

  • cygwin并不能让原生的linux应用程序运行在windows上,如果想让它运行在windows上,那么你必须通过源代码重新构建你的应用
  • cygwin并不能神奇地让原生的windows应用程序感知到unix的功能,例如信号、伪终端等

其实可以用一句话来概括一下它的功能,cygwin是一个可运行于原生windows系统上的POSIX兼容环境,可以通过重新编译将linux应用移植到windows中

好了,这样简单了解一下cygwin的功能对我们来说暂时就足够了,下面我们看看如何使用它来编译windows版本redis。

Cygwin安装

下面我们先进行编译工具Cygwin的下载和安装,在它的官网上就可以直接下载,完成后就可以开始安装了。下面我会贴出一些需要特殊配置的步骤,如果没有特殊说明的话,那么直接痛快的点击下一步就可以了。

网络连接配置这里选择第二项,也就是直接连接,不需要任何代理方式:

在选择下载源这一步,先手动输入User URL,添加阿里云的镜像http://mirrors.aliyun.com/cygwin,点击add后再选择我们刚才添加的这个源,然后点击下一步:

5

接下来选择需要下载安装的组件包,我们只需要下载我们编译相关的模块即可。先通过上面的搜索框进行定位,选择安装Devel模块下面的makegcc-coregcc-g++,以及Libs模块下的libgcc1libgccpp1,然后点击New这一列的Skip,选择要安装的版本号,全部添加完成后点击下一步:

接下来会自动进行下载上面选择的模块,等待全部下载结束后安装就完成了:

安装完成后,我们运行Cygwin64 Terminal,通过命令检测可以看到StatusOK,表示cygwin运行正常:

编译redis源码

准备好编译工具后,我们接下来先下载redis6.x版本的源码,6.0.16的下载地址为:

https://download.redis.io/releases/redis-6.0.16.tar.gz

cygwin安装完成后,会在它的安装路径的home目录下,创建一个以你登录系统的用户名来命名的目录,我们把下载完成后的压缩包放到这个cygwin64\home\${user}目录下,在cygwin命令行中先执行解压命令:

tar -xvf redis-6.0.16.tar.gz
  • 1

使用下面的命令先切换到解压后的根目录,然后执行编译和安装:

cd redis-6.0.16 
make && make install 
  • 1
  • 2

点击回车,然后就开始漫长的等待吧,不得不说编译和安装的过程真的很慢,我这大概花了20分钟才全部完成。

不出意外的最后果然出现了意外,报了两个Error,不过貌似没有什么太大影响,切换到src目录下,就已经可以看到编译完成后已经生成了6个exe可执行文件了:

但是如果这个时候双击redis-server.exe尝试进行启动的话,那么就会报错提示缺少dll动态链接库:

我们可以在cygwin的bin目录下找到这个文件,为了方便,把可执行文件、动态链接库文件、redis配置文件拷贝到一个单独的目录下再次尝试启动:

这次能够正常启动成功,我们再使用客户端连接工具连接并进行测试,终于,6.0.16版本的redis可以在windows环境下正常运行了。

最后

忙活一大顿总算成功了,我们也终于可以在windows上体验redis6.x版本了,不过这里还是给小伙伴们提个醒,这样编译的redis我们平常自己在学习中体验一下就可以了,尽量不要用在生产上。

因为cygwin编译后的程序,相当于在windows系统上模拟实现了POSIX兼容层,应用程序在底层多了一层函数调用,因此效率比运行在linux系统的原生应用低了很多。因此,这样在windows上运行的redis,无疑会损失掉它引以为傲的高性能这一优势。

秉持着好东西就要分享的原则,我也已经把编译好的windows版redis6.0.16上传到了网盘,有需要的小伙伴们可以通过下面的方式获取:

公众号『码农参上』后台回复 redis6 ,自动获取网盘下载链接

那么,这次的分享就到这里,我是Hydra,下期见。

作者简介,码农参上,一个热爱分享的公众号,有趣、深入、直接,与你聊聊技术。个人微信DrHydra9,欢迎添加好友,进一步交流。

与[转帖]编译实战 | 手摸手教你在Windows环境下运行Redis6.x相似的内容:

[转帖]编译实战 | 手摸手教你在Windows环境下运行Redis6.x

原创:微信公众号 码农参上,欢迎分享,转载请保留出处。 哈喽大家好啊,我是没事就愿意瞎捣鼓的Hydra。 不知道有没有小伙伴像我一样,平常开发中用的是windows操作系统,有时候想装点什么软件,一看只支持linux系统,无奈要么启动虚拟机、要么装在云服务器上。 这不前几天又是这样,刚想用一下Red

[转帖]Kafka 核心技术与实战学习笔记(六)kafka线上集群部署方案

一.操作系统-Linux Kafka是JVM系的大数据框架kafka由Scala语言和Java语言编写而成,编译之后的源代码就是普通的".class"文件 使用Linux kafka客户端底层使用Java的selector,selector在Linux上的实现机制是epoll,由于在windows上

[转帖]【JVM】字节码执行引擎

引入 class文件就是字节码文件,是由虚拟机执行的文件。也就是java语言和C & C++语言的区别就是,整个编译执行过程多了一个虚拟机这一步。这个在 类文件结构 中已经解释。上一节讲了虚拟机是如何加载一个class的,这一节就讲解虚拟机是如何执行class文件的。 运行时栈帧结构 1.定义 栈是

[转帖]docker编译speccpu2017

实验步骤: 1.下载docker和speccpu2017 2.docker下载镜像,创建容器 3.将下载的宿主机speccpu2017拷贝到docker创建的容器中(docker cp) 4.在docker容器(docker exec)中编译运行speccpu2017 下载docker yum in

[转帖]Systemtap系列之语法专辑

1. 常用技巧 systemtap可以实现交叉编译: 编译可执行模块如下: stap -r kernel_version script -m module_name 运行命令如下: staprun module_name.ko stap命令会读取脚本的指令,并翻译成C代码,编译成内核模块加载到内核。

[转帖]eBPF监控工具bcc系列一启航

https://blog.51cto.com/u_15333820/3453313 在eBPF篇中,我们知道虽然可用 C 来实现 BPF,但编译出来的却仍然是 ELF 文件,开发者需要手动析出真正可以注入内核的代码。工作有些麻烦,于是就有人设计了 BPF Compiler Collection(BC

[转帖]【JVM】JVM概述

1.JVM定义 JVM 是Java Virtual Machine(JVM )的缩写,Java虚拟机在执行字节码时,把字节码解释成具体平台上的机器指令进行执行,这样实现了Java“一次编译,到处运行”。 2.JVM组成 JVM由三大部分组成:类加载器(ClassLoader subsystem),执

[转帖]springboot中使用skywalking实现日志追踪

文章目录 SkyWalking分布式追踪系统介绍主要架构 环境引入依赖配置Log4j2下载编译好的8.7.0版本包使用探针实现日志追踪启动脚本启动Java服务访问服务 使用UI切换存储方式 SkyWalking分布式追踪系统 介绍 Skywalking是一个国产的开源框架,2015年有吴晟个人开源,

[转帖]ramdisk三种实现方式

https://www.jianshu.com/p/c14cee74fa0a Ramdisk/ramfs/tmpfs Ramdisk:大小固定,默认4096k。在编译内核的时候需将block device 中的Ramdisk支持选项加上。如果对Ramdisk的支持已经编译进内核,可以如下方式使用:查

[转帖]在麒麟linux上安装Postgresql12.5

https://jimolonely.github.io/tech/linux/install-postgresql-kylin/ 本文主要实践在麒麟V10版本上通过源码编译安装PostgreSQL12.5,因为是源码编译,所以对于其他版本也具有参考性。 麒麟版本 V10 $ uname -a Li