编译实战 | 手摸手教你在Windows环境下运行Redis6.x
原创:微信公众号
码农参上,欢迎分享,转载请保留出处。
哈喽大家好啊,我是没事就愿意瞎捣鼓的Hydra。
不知道有没有小伙伴像我一样,平常开发中用的是windows操作系统,有时候想装点什么软件,一看只支持linux系统,无奈要么启动虚拟机、要么装在云服务器上。
这不前几天又是这样,刚想用一下Redis 6.x版本来尝试一下新特性,打开官网一看,好家伙我直呼内行,果然不支持windows系统:

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

项目的git地址是 https://github.com/MicrosoftArchive/redis/releases,我翻了一下,微软维护了2.x和3.x的多个windows版本redis,不过比较遗憾,在维护到3.0.504正式版本后就放弃了更新。
不过问题不大,眼看微软撂挑子不干了,波兰的热心市民 Tomasz Poradowski 先生这时候站出来,继续开始提供可以在windows上运行的4.x和5.x版本的redis,并且从2017年到2022年一干就是5年。

项目git地址是https://github.com/tporadowski/redis/releases,没错,其实我本地环境运行的redis-5.0.9就是以前从这里下载的,而且绿色版使用起来真的是干净又卫生,所以我强烈建议大家给这位老哥来一个Star支持一下。
不过绕了这么一大圈,我的问题还是没有解决啊,既然没有现成的可以在windows上运行的redis6.x版本,那我们干脆就来自己编译一个吧。
初识Cygwin
首先介绍一下我们今天要用到的工具Cygwin,先简单看一下它的官网 https://cygwin.com/,上面很清晰的解释了几个容易引起大家混淆的问题:

先解释了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后再选择我们刚才添加的这个源,然后点击下一步:

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

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

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

编译redis源码
准备好编译工具后,我们接下来先下载redis6.x版本的源码,6.0.16的下载地址为:
cygwin安装完成后,会在它的安装路径的home目录下,创建一个以你登录系统的用户名来命名的目录,我们把下载完成后的压缩包放到这个cygwin64\home\${user}目录下,在cygwin命令行中先执行解压命令:
tar -xvf redis-6.0.16.tar.gz
使用下面的命令先切换到解压后的根目录,然后执行编译和安装:
cd redis-6.0.16
make && make install
点击回车,然后就开始漫长的等待吧,不得不说编译和安装的过程真的很慢,我这大概花了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的更多相关文章
- 编译ORBSLAM2 build_ros.sh,实现kinect2在ROS环境下运行ORBSLAM2
//編譯ORBSLAM2 build_ros.sh參考:“http://www.cnblogs.com/bigzhao/p/6635770.html”1.source ~/.bashrc出現問題:ct ...
- 手把手教你在Windows环境下升级R
在Windows环境下,我们可以使用installr包自动将R升级到最新版本.并且可以安装软件.下面主要演示如何在Windows环境下升级R,并将旧版本安装的R包复制到更新版本的R. 1.加载inst ...
- iOS动画进阶 - 手摸手教你写 Slack 的 Loading 动画
如果移动端访问不佳,可以访问我的个人博客 前几天看了一篇关于动画的博客叫手摸手教你写 Slack 的 Loading 动画,看着挺炫,但是是安卓版的,寻思的着仿造着写一篇iOS版的,下面是我写这个动画 ...
- 【转】手摸手,带你用vue撸后台 系列三(实战篇)
前言 在前面两篇文章中已经把基础工作环境构建完成,也已经把后台核心的登录和权限完成了,现在手摸手,一起进入实操. Element 去年十月份开始用vue做管理后台的时候毫不犹豫的就选择了Elemen, ...
- 手摸手教你如何在 Python 编码中做到小细节大优化
手摸手教你如何在 Python 编码中做到小细节大优化 在列表里计数 """ 在列表里计数,使用 Python 原生函数计数要快很多,所以尽量使用原生函数来计算. &qu ...
- 手摸手教你微信小程序开发之自定义组件
前言 相信大家在开发小程序时会遇到某个功能多次使用的情况,比如弹出框.这个时候大家首先想到的是组件化开发,就是把弹出框封装成一个组件,然后哪里使用哪里就调用,对,看来大家都是有思路的人,但是要怎样实现 ...
- 手摸手教你让Laravel开发Api更得心应手
https://www.guaosi.com/2019/02/26/laravel-api-initialization-preparation/ 1. 起因 随着前后端完全分离,PHP也基本告别了v ...
- 【转】手摸手,带你用vue撸后台 系列四(vueAdmin 一个极简的后台基础模板)
前言 做这个 vueAdmin-template 的主要原因是: vue-element-admin 这个项目的初衷是一个vue的管理后台集成方案,把平时用到的一些组件或者经验分享给大家,同时它也在不 ...
- 【转】手摸手,带你用vue撸后台 系列一
前言 说好的教程终于来了,第一篇文章主要来说一说在开始写业务代码前的一些准备工作吧,但这里不会教你webpack的基础配置,热更新怎么做,webpack速度优化等等,有需求的请自行google. 目录 ...
随机推荐
- WIRESHARK 提取百度云客户端中的下载地址
序言:近两年感觉云盘是越来越不行了,什么115,360,华为,新浪一些网盘纷纷关门,现在手里能用的就只剩下一个百度云坚挺着.可那速度,简直感人,好吧,没钱冲VIP,就去找了一个破解版,用了一年,爽得飞 ...
- 网络编程-Python的netaddr库
In [1]: from netaddr import * In [2]: ip = IPAddress('172.16.100.39') ip.format()ip地址的格式化 '172.16. ...
- 一台 Linux 系统初始化环境后需要做一些什么安全工作?
1.添加普通用户登陆,禁止 root 用户登陆,更改 SSH 端口号. 修改 SSH 端口不一定绝对哈.当然,如果要暴露在外网,建议改下.l 2.服务器使用密钥登陆,禁止密码登陆. ...
- 关于web以及浏览器处理预加载有哪些思考?
图片等静态资源在使用之前就提前请求资源使用到的时候能从缓存中加载, 提升用户体验页面展示的依赖关系维护
- 服务注册和发现是什么意思?Spring Cloud 如何实现?
当我们开始一个项目时,我们通常在属性文件中进行所有的配置.随着越来越多的服务开发和部署,添加和修改这些属性变得更加复杂.有些服务可能会下降,而某些位置可能会发生变化.手动更改属性可能会产生问题.Eur ...
- Redis缓存穿透、缓存雪崩、缓存击穿
缓存穿透: 缓存穿透,是指查询一个数据库一定不存在的数据.正常的使用缓存流程大致是,数据查询先进行缓存查询,如果key不存在或者key已经过期,再对数据库进行查询,并把查询到的对象,放进缓存.如果 ...
- 《剑指offer》面试题3:二维数组中的查找
面试题3:二维数组中的查找 面试题3:二维数组中的查找题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的个二维数组和一个整数,判 ...
- 面试BAT,你凭什么说你掌握了CSS
介绍 项目已经开源:https://github.com/nanhupatar... 欢迎PR 推荐 关注我们的公众号 display: none; 与 visibility: hidden; 的区别 ...
- 谈谈关于CSS中transform属性之scale
谈谈关于scale属性 scale是什么? 根据W3C定义 ,scale主要是进行缩放和转化: scale能做什么? 1.1px细线 <div class="wrap"> ...
- 隐藏IE10默认在input框输入内容后显示“X”按钮
::-ms-clear{display: none;} ::-ms-reveal{display: none;}