互联网上也有提供windows版本的Redis,但通常会比官方低两个版本以上,但这里,咱们要亲自动手进行最新版本的编译。linux
###在win平台下编译Redis通常有两种方式: ####1. 基于MS VC进行编译,生成原生可执行文件 该方式须要建立MSVC项目文件以及对Redis源码进行适当调整。 这里提供一个可行版本,由微软开放团队进行维护,目前版本是Redis 2.6, 有MS VC的朋友能够尝试一下: 猛击:https://github.com/MSOpenTech/redis ####2. 基于Cygwin进行编译 Cygwin是运行在windows平台上的POSIX系统(例如unix,linux,bsd)模拟环境,为咱们提供编译环境。git
###本文将以Cygwin方式进行Redis经常使用版本的编译,这里先说明一下编译环境: Windows 7 64位 + Cygwin 64位(已安装好gcc 4.8.1 及 make环境)github
###下面进行详细描述: ####1. 安装Cygwin(须要4~6G disk space) 其安装过程时间会较长,你们能够先去干一些喜欢作的事情,安装过程就省略了redis
####2. 运行Cygwin,检查编辑译环境windows
$ gcc -v ... Target: x86_64-pc-cygwin ... Thread model: posix gcc version 4.8.1 (GCC) $ make -v GNU Make 4.0 Built for x86_64-pc-cygwin ...
####3. 下载Redis,对Redis进行适当修改 下载:ui
$ wget http://download.redis.io/releases/redis-2.8.3.tar.gz $ tar -zxvf redis-2.8.3.tar.gz $ cd redis-2.8.3
若要顺利编译,须要对redis.h进行修改:this
$ vi src/redis.h
在第一个#define前增长如下代码,解决"debug.c: 790:37: error: 'SA_ONSTACK' undeclared (first use in this function)"错误lua
/* Cygwin Fix */ #ifdef __CYGWIN__ #ifndef SA_ONSTACK #define SA_ONSTACK 0x08000000 #endif #endif
若出现 ae_select.c:38:5: 错误: 提示未知的类型名'fd_set' fd_set rfds, wfds,则须要在 ae_select.c 的 第一个#include后增长如下内容spa
#include <sys/select.h> #include <sys/time.h>
注:redis-2.8.3只须要进行上述修改便可顺利编译, redis-3.0.一、redis-3.2.0 须要更新net.c文件,以下:debug
vi /deps/hiredis/net.c
在 #include "sds.h"后增长如下代码
/* Cygwin Fix */ #ifdef __CYGWIN__ #define TCP_KEEPCNT 8 #define TCP_KEEPINTVL 150 #define TCP_KEEPIDLE 14400 #endif
####4. 编译与运行 先编译依赖包
$ cd deps $ make lua hiredis linenoise $ cd ..
而后编译主项目
$ make && make install ... $ redis-server [7920] 21 Dec 16:49:07.336 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf [7920] 21 Dec 16:49:07.338 # Unable to set the max number of files limit to 10032 (Too many open files), setting the max clients configuration to 3088. _._ _.-``__ ''-._ _.-`` `. `_. ''-._ Redis 2.8.3 (00000000/0) 64 bit .-`` .-` `. ` `\/ _.,_ ''-._ ( ' , .-` | `, ) Running in stand alone mode |`-._`-...-` __...-.``-._|'` _.-'| Port: 6379 | `-._ `._ / _.-' | PID: 7920 `-._ `-._ `-./ _.-' _.-' |`-._`-._ `-.__.-' _.-'_.-'| | `-._`-._ _.-'_.-' | http://redis.io `-._ `-._`-.__.-'_.-' _.-' |`-._`-._ `-.__.-' _.-'_.-'| | `-._`-._ _.-'_.-' | `-._ `-._`-.__.-'_.-' _.-' `-._ `-.__.-' _.-' `-._ _.-' `-.__.-' [7920] 21 Dec 16:49:07.351 # Server started, Redis version 2.8.3 [7920] 21 Dec 16:49:07.351 * The server is now ready to accept connections on port 6379
$ redis-server.exe 8172:C 16 May 17:51:01.316 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf 8172:M 16 May 17:51:01.322 # You requested maxclients of 10000 requiring at least 10032 max file descriptors. 8172:M 16 May 17:51:01.322 # Redis can't set maximum open files to 10032 because of OS error: Too many open files. 8172:M 16 May 17:51:01.322 # Current maximum open files is 3200. maxclients has been reduced to 3168 to compensate for low ulimit. If you need higher maxclients increase 'ulimit -n'. _._ _.-``__ ''-._ _.-`` `. `_. ''-._ Redis 3.0.1 (00000000/0) 64 bit .-`` .-` `. ` `\/ _.,_ ''-._ ( ' , .-` | `, ) Running in standalone mode |`-._`-...-` __...-.``-._|'` _.-'| Port: 6379 | `-._ `._ / _.-' | PID: 8172 `-._ `-._ `-./ _.-' _.-' |`-._`-._ `-.__.-' _.-'_.-'| | `-._`-._ _.-'_.-' | http://redis.io `-._ `-._`-.__.-'_.-' _.-' |`-._`-._ `-.__.-' _.-'_.-'| | `-._`-._ _.-'_.-' | `-._ `-._`-.__.-'_.-' _.-' `-._ `-.__.-' _.-' `-._ _.-' `-.__.-' 8172:M 16 May 17:51:01.404 # Server started, Redis version 3.0.1 8172:M 16 May 17:51:01.410 * DB loaded from disk: 0.006 seconds 8172:M 16 May 17:51:01.410 * The server is now ready to accept connections on port 6379
成功的话能够看到以上信息,可执行下文件默认安装到/usr/local/bin下。
####5. 提取依赖库,使其能够在Cygwin以外运行 最后,若须要在Cygwin以外运行,还须要拷贝/bin下的cygwin1.dll文件,这里提供一个已打包好的版本(64位,对于32位的朋友只能说sorry了)
猛击:redis-2.8.3-win64.7z | redis-3.0.1-win64.7z | redis-3.2.0-win64.7z
注:redis-3.2.0 增长了 GEO API 哦