Redis 是个高性能的键值数据库,现在日常项目开发过程中,目前个人开发项目基本都会用到 Redis,主要是用来做 缓存 和 分布式锁 的底层支持,个人喜欢用 .NET 技术体系,所以一般部署也是用 Windows 服务器居多,但是目前 Redis 官方并没有提供 Windows 版本的Redis 发行包,网上能找到的一些 Windows 版的 Redis 都是比较老的版本了,目前最新的 Redis master 已经是 7.x 版本了,深入研究后发现 Redis 是用 C 语言开发的,所以还是有编译到Windows版的可能的,这里给大家分享我编译 Windows 版 Redis 的操作。

首先介绍以下基本思路,整体过程主要为以下几步

  1. 获取 Redis 最新版 源码  https://github.com/redis/redis/releases
  2. 安装 MSYS2 并编译 Redis 源码
  3. 使用 .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 文件夹总共应该有这些文件,这时候直接双击 redis-server.exe 就可以启动我们自己编译好的 RedisServer 了,如下图:

当启动后出现上面的界面就说明我们的 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 代码内容如下:

  1. using System.Diagnostics;
  2. using System.ServiceProcess;
  3.  
  4. namespace RedisService
  5. {
  6. class Program
  7. {
  8. [System.Diagnostics.CodeAnalysis.SuppressMessage("Interoperability", "CA1416:验证平台兼容性", Justification = "<挂起>")]
  9. static void Main()
  10. {
  11. ServiceBase.Run(new RedisService());
  12. }
  13. }
  14.  
  15. partial class RedisService : ServiceBase
  16. {
  17.  
  18. private Process? process = new();
  19.  
  20. protected override void OnStart(string[] args)
  21. {
  22. var basePath = Path.Combine(AppContext.BaseDirectory).Replace("\\", "/");
  23. var diskSymbol = basePath[..basePath.IndexOf(":")];
  24. var confPath = basePath.Replace(diskSymbol + ":", "/cygdrive/" + diskSymbol);
  25.  
  26. ProcessStartInfo processStartInfo = new(basePath + "redis-server.exe", confPath + "redis.conf");
  27. process = Process.Start(processStartInfo);
  28. }
  29.  
  30. protected override void OnStop()
  31. {
  32. if (process != null)
  33. {
  34. process.Kill();
  35. process.Dispose();
  36. }
  37. }
  38. }
  39.  
  40. }

然后调整以下

发布的时候推荐如下设置:采用独立模式,启用预编译发布为单个文件

发布后得到如下文件

将发布后的文件拷贝到  d:\redis\dist\bin 文件夹和我们开始发布的 Redis 文件放到同一个目录

这样我们整个 RedisServer 就制作完成了,可以把这些文件全部打包保存起来,将来想要安装到某台电脑时,只要执行如下的 安装,卸载,启动,停止 命令即可

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

安装服务

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 基础框架项目,项目地址如下

使用 Redis 源码编译发布 Windows 版 Redis For Windows 发行包的更多相关文章

  1. Nginx+Php-fpm+MySQL+Redis源码编译安装指南

    说明:本教程由三部分组成如下: 1.      源码编译安装Nginx 2.      源码编译安装php以及mysql.redis扩展模块 3.      配置虚拟主机 文中所涉及安装包程序均提供下 ...

  2. 曹工说Redis源码(4)-- 通过redis server源码来理解 listen 函数中的 backlog 参数

    文章导航 Redis源码系列的初衷,是帮助我们更好地理解Redis,更懂Redis,而怎么才能懂,光看是不够的,建议跟着下面的这一篇,把环境搭建起来,后续可以自己阅读源码,或者跟着我这边一起阅读.由于 ...

  3. Redis源码编译安装

    介绍 REmote DIctionary Server(Redis) 是一个由Salvatore Sanfilippo写的key-value存储系统.Redis是一个开源的使用ANSI C语言编写.遵 ...

  4. Linux下搭建redis(源码编译)

    [准备环境] Linux centos7 redis下载包  地址:http://www.redis.cn/download.html  前往下载稳定版本 [步骤] 1.下载成功后 把包上传到服务器 ...

  5. windows 10上源码编译dlib教程 | compile dlib on windows 10

    本文首发于个人博客https://kezunlin.me/post/654a6d04/,欢迎阅读! compile dlib on windows 10 Series Part 1: compile ...

  6. 在CentOS7上从源码编译安装redis,并做成服务程序

    1.安装编译的依赖环境 # 安装pcre开发包: yum install -y pcre-devel # 安装ssl功能需要openssl库 yum -y install openssl-devel ...

  7. hadoop-1.2.0源码编译

    以下为在CentOS-6.4下hadoop-1.2.0源码编译步骤. 1. 安装并且配置ant 下载ant,将ant目录下的bin文件夹加入到PATH变量中. 2. 安装git,安装autoconf, ...

  8. redis源码笔记(一) —— 从redis的启动到command的分发

    本作品采用知识共享署名 4.0 国际许可协议进行许可.转载联系作者并保留声明头部与原文链接https://luzeshu.com/blog/redis1 本博客同步在http://www.cnblog ...

  9. centos7 源码编译安装TensorFlow CPU 版本

    一.前言 我们都知道,普通使用pip安装的TensorFlow是万金油版本,当你运行的时候,会提示你不是当前电脑中最优的版本,特别是CPU版本,没有使用指令集优化会让TensorFlow用起来更慢. ...

随机推荐

  1. 虚拟机:ESX

    VMware ESXi 与ESX 产品之比较   VMware vSphere 5.0 以后版本,所有底层虚拟化产品都改为ESXi产品,本文主要比较了ESXi与ESX的各自特点,以便对大家是否要把现有 ...

  2. Java实现数据库增删改查

    代码示例: import java.sql.*; public class Renewal { // 创建类static Connection con; // 声明Connection对象static ...

  3. Net6 Xunit 集成测试

    对于单元测试.集成测试大部分开发的朋友都懒得去写,因为这要耗费精力去设计去开发,做完项目模块直接postman 调用测试(当然这是一个选择,开发也中经常用到),但是如果测试需要多样化数据,各种场景模拟 ...

  4. 基础篇:java GC 总结,建议收藏

    垃圾标记算法 垃圾回收算法 major gc.mini gc.full gc.mixed gc 又是什么,怎么触发的 垃圾回收器的介绍 Safe Point 和 Safe Region 什么是 TLA ...

  5. mybatis中二级缓存整合ehcache实现分布式缓存

    mybatis自带二级缓存,但是这个缓存是单服务器工作,无法实现分布式缓存.那么什么是分布式缓存呢?假设现在有两个服务器1和2,用户访问的时候访问了1服务器,查询后的缓存就会放在1服务器上,假设现在有 ...

  6. 盘点微信小程序跨页面传值的若干方式

    直接给大家上干货 1.跳转页面传递参数 pageA.wxml <button type="primary" bindtap="jumpTo">点击跳 ...

  7. 155_模型_Power BI & Power Pivot 进销存之安全库存

    155_模型_Power BI & Power Pivot 进销存之安全库存 一.背景 谈进销存的概念时,我们也需要提及另外一个概念:安全库存. 库存周转在理想的状态下是做到零库存,但是在内部 ...

  8. CentOS8设置国内镜像源(阿里云镜像)

    CentOS8设置国内镜像源(阿里云) 1.备份原有配置 [root@localhost ~]# mkdir /etc/yum.repos.d.bak [root@localhost ~]# mv / ...

  9. Docker容器编译安装Redis

    Docker容器编译安装Redis 1.创建容器 -i 交互模式 -d 后端运行 -h 容器的hostname --name 容器名 --network 网卡 --ip IP地址 -p 端口映射 -- ...

  10. Pytorch实现波阻抗反演

    Pytorch实现波阻抗反演 1 引言 地震波阻抗反演是在勘探与开发期间进行储层预测的一项关键技术.地震波阻抗反演可消除子波影响,仅留下反射系数,再通过反射系数计算出能表征地层物性变化的物理参数.常用 ...