Redis官方为什么不供给Windows版本?

刚刚阅读1回复0
kanwenda
kanwenda
  • 管理员
  • 注册排名1
  • 经验值147250
  • 级别管理员
  • 主题29450
  • 回复0
楼主

Redis 是个高性能的键值数据库,如今日常项目开发过程中,目前小我开发项目根本城市用到 Redis,次要是用来做 缓存 和 散布式锁 的底层撑持,小我喜好用 .NET 手艺系统,所以一般摆设也是用 Windows 办事器居多,但是目前 Redis 官方并没有供给 Windows 版本的Redis 发行包,网上能找到的一些 Windows 版的 Redis 都是比力老的版本了,目前最新的 Redis master 已经是 7.x 版本了,深切研究后发现 Redis 是用 C 语言开发的,所以仍是有编译到Windows版的可能的,那里给各人分享我编译 Windows 版 Redis 的操做。

起首介绍以下根本思绪,整体过程次要为以下几步

获取 Redis 最新版 源码 https://github.com/redis/redis/releases安拆 MSYS2 并编译 Redis 源码利用 .NET6 开发一个 RedisService 用于将 编译好的 Redis 整合成办事,撑持以 Windows 办事运行

起首我们将 Redis 的源码下载到当地文件夹,能够间接从 https://github.com/redis/redis/releases 页面下载最新版的 源码,截至目前最新版是 7.0.4 ,那里我们下载 tar.gz 格局的压缩包

源码下载完成之后,安拆 最新版的 MSYS2 ,那是一个编译东西,能够用于在 Windows 下编译 Linux 中的一些软件,本次我们就利用他来将 Redis 的源码编译为 Windows 版本

https://www.msys2.org 那个是官网地址,能够从那里下载

MSYS2 的安拆过程就不展开了,下载 exe 之后间接点击下一步,下一步的操做就能够了,没有什么需要出格留意的。

MSYS2 安拆之后,从起头菜单找到MSYS2 MSYS 起头运行,进入 MSYS2 之后次要就依赖于号令行的操做了。过程中会询问能否继续,选择 Y

#更新 MSYS2 系统

pacman -Syu

# 安拆 gcc make pkg-config

pacman -Sy gcc make pkg-config

# 切换到编译的目次(MSYS2 /d 就是 D盘;/e 就是 E盘) 我那里预先在 D盘创建了一个 redis 空文件夹用于本次的编译操做

cd /d/redis

将下载好的 源代码压缩包剪切到对应的编译目次,我们那里是 d:/redis/

# 解压 redis 源码

tar -xvf redis-7.0.4.tar.gz

# 进入源码目次

cd redis-7.0.4

然后需要到 MSYS2 的安拆目次去修改 dlfcn.h 文件,详细如下:

翻开 C:\msys64\usr\include\usr\include\dlfcn.h 文件修改源码 正文或删除掉 宏断定 #if __GNU_VISIBLE (49行)和 #endif (61行) 否则会报找不到构造 Dl_info 错误。

MSYS2 目次默认为:C:\msys64\ ,那个其实就是msys2 的安拆目次,若是安拆过程中修改了安拆目次,则到本身对应的安拆目次然后依次找到 usr 文件夹 下的 include 文件夹下的 dlfcn.h 文件即可

需要对那段代码正文掉 第49行和61行,如下图

正文之后保留退出即可,然后从头回到我们的 MSYS2 末端控造台起头停止编译 Redis

# 编译

make PREFIX=/d/redis/dist install

过程中会有一些警告之类的信息能够间接忽略,只要能够胜利编译即可。

编译胜利之后,在电脑的 d:\redis\dist\bin 文件夹就能够看到编译后的 windows 版 exe 文件

编译完成后还需要复造如下三个文件

msys-2.0.dll 位于 c:\msys64\usr\bin

redis.conf 位于 redis源码文件夹,d:\redis\redis-7.0.4

sentinel.conf 位于 redis 源码文件夹,d:\redis\redis-7.0.4

复造以上三个文件到我们的 d:\redis\dist\bin 文件夹

我们的 d:\redis\dist\bin 文件夹总共应该有那些文件。

需要留意因为 MSYS2 的规定,我们的软件必需至少要放置在 2层目次文件夹内,才能够一般运行,好比 d:/redis/dist/bin/ 能够,d:/redis/ 则不成以。

RedisServer 能够通过如下两种体例启动

cmd 启动

d: cd d:\redis\dist\bin redis-server.exe redis.conf

powershell 启动

d: cd d:\redis\dist\bin ./redis-server.exe redis.conf

当启动后呈现上面的界面就申明我们的 redis-server 正式编译发布胜利了,能够用本身习惯的 redis 毗连东西去测验考试毗连 127.0.0.1:6379 ,我小我习惯利用 Another Redis Desktop Manager,毗连之后能够看到如下面的形态信息

从形态如看出来是 7.0.4 的版本,至此 关于操纵 Redis源码编译发布 Windows版的 Reidis 的操做就完成了,下面介绍若何连系 .NET 来开发一个 Windows 办事,为我们编译的那个 redis-server.exe 实现 windows 办事的安拆运行形式。不然每次利用都要去手动启动 redis-server.exe 比力繁琐。

起首操纵 VisualStudio 创建一个 .NET 6 的控造台法式,然后在Nuget 安拆 Microsoft.Windows.Compatibility 组件

整个项目标代码不多,次要就是 Program.cs 代码内容如下:

using System.Diagnostics; using System.ServiceProcess; namespace RedisService { class Program { [System.Diagnostics.CodeAnalysis.SuppressMessage("Interoperability", "CA1416:验证平台兼容性", Justification = "<挂起>")] static void Main() { ServiceBase.Run(new RedisService()); } } partial class RedisService : ServiceBase { private Process? process = new(); protected override void OnStart(string[] args) { var basePath = Path.Combine(AppContext.BaseDirectory).Replace("\\", "/"); var diskSymbol = basePath[..basePath.IndexOf(":")]; var confPath = basePath.Replace(diskSymbol + ":", "/cygdrive/" + diskSymbol); ProcessStartInfo processStartInfo = new(basePath + "redis-server.exe", confPath + "redis.conf"); processStartInfo.WorkingDirectory = basePath; process = Process.Start(processStartInfo); } protected override void OnStop() { if (process != null) { process.Kill(); process.Dispose(); } } } }

发布的时候保举如下设置:接纳独立形式,启用预编译发布为单个文件

发布后得到如下文件

将发布后的文件拷贝到 d:\redis\dist\bin 文件夹和我们起头发布的 Redis 文件放到统一个目次

如许我们整个 RedisServer 就造做完成了,能够把那些文件全数打包保留起来,未来想要安拆到某台电脑时,只要施行如下的 安拆,卸载,启动,停行 号令即可

假设 我们将那个文件夹放在了 d:/Software/Redis/

需要留意因为 MSYS2 的规定,我们的软件必需至少要放置在 2层目次文件夹内,才能够一般运行,好比 d:/Software/Redis/ 能够,d:/Software/ 则不成以。

安拆办事

sc.exe create Redis binpath= D:\Software\Redis\RedisService.exe start= auto

如许就把胜利把我们本身造做的 Windows版Redis安拆好了,每次开机城市主动启动

启动办事

net start Redis

停行办事

net stop Redis

卸载办事

sc.exe delete Redis

至此 利用 Redis 源码编译发布 Windows 版 Redis For Windows 发行包 就讲解完了,有任何不大白的,能够在文章下面评论或者私信我,欢送各人积极的讨论交换,有兴趣的伴侣能够存眷我目前在维护的一个 .net 根底框架项目,项目地址如下

https://github.com/berkerdong/NetEngine.git

https://gitee.com/berkerdong/NetEngine.git

0
回帖 返回旅游

Redis官方为什么不供给Windows版本? 期待您的回复!

取消
载入表情清单……
载入颜色清单……
插入网络图片

取消确定

图片上传中
编辑器信息
提示信息