先说点实际的。Redis 官方其实一直不提供 Windows 原生安装包,所以“redis7 for windows的安装教程”这个需求,十个人里有九个会先卡在“去哪下载”“下了哪个版本”“怎么配置才能跑起来”这三件事上。这篇文章我不打算只丢给你一个压缩包链接就完事,我先把 Windows 上能跑 Redis 7 的几条路线全捋一遍,再手把手演示最常用的 ZIP 解压版、WSL 版和 Docker 版三种安装方式,最后把调试和排坑过程也一起写上。无论你是只想要个本地缓存环境,还是要用 Redis 7 的新特性做开发联调,这篇文章都够用了。
我最早在 Windows 上装 Redis 还是 3.x 时代,那时候就两个选择:要么用微软改的社区版,要么自己在 Linux 虚拟机里折腾。到了 Redis 7.0 之后,可选择的方案一下多了不少,但也带来新的困惑——版本太多,反而不知道哪个靠谱。下面先从背景讲起,再逐个上实操。
1. 先说清楚:为什么 Windows 上装 Redis 7 总是这么折腾
1.1 官方没有原生包,Windows 生态全靠社区接力
Redis 官方从立项开始就主要面向 POSIX 系统,代码里大量用到了fork()、epoll这类 Linux 专属机制。Windows 上没有完全对等的东西,官方也没有动力去维护一份 Windows 编译分支。所以你在 redis.io 官网下载页是找不到redis-7.x.msi这类安装包的,官方文档里对 Windows 的态度一直是“可以用 WSL 跑”。
那 Windows 上的 Redis 是怎么来的?主要是三个来源:
- 微软开源技术组早年维护的
microsoftarchive/redis分支,但停在 Redis 5.0.14 就不再往前走了。 - 第三方开发者把 Redis 7.0 交叉编译成 Windows 可执行文件,最常见的是
tporadowski在 GitHub 上发布的 ZIP 包。 - 通过 WSL2 或 Docker Desktop 等虚拟化方案,在 Windows 里跑真正原生的 Linux 版 Redis。
很多人一搜“redis windows 下载”,会误以为自己下载的是官方版本,结果拿到的要么是老掉牙的 5.x,要么是来路不明的第三方编译包。这里建议你先确定自己的目标:只是本地学一学、当缓存用用,那选择第三方的 Windows 原生版完全没问题;如果是作为团队协作环境或者接近生产场景,我会建议 WSL 或 Docker,因为版本更新、行为也和线上 Linux 一致。
1.2 四条路线的优缺点对比
我在不同项目里试过所有主流方案,简单做个对比,方便你按场景选:
| 方案 | 优点 | 缺点 | 适合场景 |
|---|---|---|---|
| ZIP 解压版(tporadowski 等第三方编译) | 下载快、双击即用、占用小 | 版本落后官方(停留在 7.0.x),不够“原生” | 本地快速体验、临时工具 |
| WSL2 + apt 安装 | 官方推荐、生态一致、升级方便 | 需要启用虚拟化平台,内存占用偏高 | 日常开发、学习、需要贴近 Linux 行为 |
| Docker Desktop 容器 | 环境隔离、部署方式接近生产、可随意切换版本 | 依赖 Docker,启动较慢 | 多版本切换、微服务联调 |
| Memurai | 兼容 Redis API、原生 Windows 服务 | 商业授权问题,免费版有限制 | 需要 Windows 原生服务且对稳定性要求高的团队 |
我个人的原则很简单:自己玩用 ZIP 解压版 + WSL 双保险,工作项目尽量容器化。下面分别讲具体装法。
2. 方案一:ZIP 解压版(最省事的民间编译版)
2.1 下载与解压,redis-server.exe 直接双击之前先看一眼
这个是绝大多数新手最容易上手的路径。去 GitHub 搜tporadowski/redis,在 Releases 页面找到最新版本,下载 ZIP 包。解压后你会看到一堆文件,核心是这几个:
redis-server.exe——服务端程序redis-cli.exe——命令行客户端redis.windows.conf——Windows 用的配置文件redis.windows-service.conf——注册 Windows 服务用的推荐配置
解压路径建议放在纯英文目录下,比如D:\redis7。我之前见过有人把 Redis 放到C:\Program Files\...带空格和中文的路径里,注册服务时各种报错,后来换目录就好了。
启动之前先做一件事:打开redis.windows.conf,确认port 6379这行没有被注释。Redis 默认监听 6379 端口,第一次启动没必要改端口,除非你本地已有服务占用。确认后,直接在解压目录开一个 CMD 或 PowerShell,执行:
.\redis-server.exe .\redis.windows.conf看到输出里有下面这几行,就算启动成功了:
* Ready to accept connections tcp注意这个过程是前台运行的,也就是说你把这个终端关掉,Redis 就停了。要想让它一直待在后台,不想每次手动开终端……下个小节我会讲服务注册。
还有一件事易忽略:redis-server.exe不指定配置文件也能启动,此时相当于默认配置,而且它会在当前目录尝试找dump.rdb做持久化。所以一定要显式指定配置文件,否则你改了redis.windows.conf里的密码、端口、持久化策略,全部不会生效。
2.2 用 redis-cli 验证一次完整联调
服务启动后,另开一个终端,进入 Redis 目录,执行:
.\redis-cli.exe -p 6379 ping如果返回PONG,说明服务端和客户端已经通了。接下来可以顺手验证一下 Redis 7 的标志性功能,比如 ACL 用户体系。先用默认用户尝试一条命令:
.\redis-cli.exe 127.0.0.1:6379> set hello world OK 127.0.0.1:6379> get hello "world"到这里,ZIP 版安装就完成了,整个流程不到五分钟。但如果你后续重启了电脑,会发现 Redis 没自动跑起来。这就引出了服务注册。
2.3 把 Redis 注册成 Windows 服务开机自启
以管理员身份打开 CMD 或 PowerShell,进入 Redis 目录,执行:
.\redis-server.exe --service-install .\redis.windows-service.conf --service-name Redis7 --loglevel verbose这里--service-name是给服务起个名字,默认是 Redis,我建议改成 Redis7 方便和旧版本区分。注册成功后,打开服务管理器(services.msc)能看到 Redis7 这个服务,把启动类型改成“自动”,然后手动点“启动”。
之后如果修改了配置文件,想让它生效,可以这样重启服务:
net stop Redis7 net start Redis7踩坑提醒:--service-install必须以管理员权限运行,否则报“拒绝访问”。还有,如果注册时指定的配置文件路径写的是相对路径,服务启动时可能因为当前工作目录不对而找不到配置,干脆用绝对路径:
.\redis-server.exe --service-install D:\redis7\redis.windows-service.conf --service-name Redis7卸服务时对应的是:
.\redis-server.exe --service-uninstall --service-name Redis73. 方案二:WSL 里的官方正版体验
3.1 启用 WSL 并安装发行版
如果你电脑是 Win10 2004 或 Win11,装 WSL2 是几分钟的事。管理员 PowerShell 里执行:
wsl --install默认会装 Ubuntu,并启用 WSL2 虚拟机平台。装完重启,按提示设置 Linux 用户名密码。这里有个小坑:WSL 默认网络是 NAT 模式,但 Windows 会自动做 localhost 转发,也就是说你从 Windows 侧访问 WSL 里的 Redis,直接用127.0.0.1:6379就行,不用专门记 WSL 的 IP。
3.2 apt 安装 Redis 并处理 systemd 问题
Ubuntu 的 apt 源里有 Redis,但版本可能不是最新的。如果想装 Redis 7.x,推荐用官方提供的 PPA:
sudo apt update sudo apt install -y redis-server装完后检查版本:
redis-server --versionUbuntu 22.04 官方源里配的已经是 Redis 7.0 了,如果你需要更新的小版本(比如 7.2、7.4),可以加ppa:redislabs/redis:
sudo add-apt-repository ppa:redislabs/redis sudo apt update sudo apt install redis-server启动方式上有个 WSL 特有的坑:WSL2 默认不跑 systemd(除非你在/etc/wsl.conf里手动开启),所以systemctl start redis-server大概率会报错。正确姿势是用 service 命令:
sudo service redis-server start然后看状态:
redis-cli ping同样返回PONG就完成任务了。如果用的 Ubuntu 22.04 以上版本且开启了 systemd,也可以用systemctl enable --now redis-server,但service方法最不会出错。
3.3 从 Windows 侧访问 WSL 里的 Redis
前面提到 localhost 转发,正常情况下你在 Windows 的 PowerShell 里执行:
redis-cli -p 6379 ping会得到PONG。前提是你 Windows 上也装了 redis-cli,或者直接用wsl redis-cli:
wsl redis-cli如果在 Windows 侧的开发工具(比如 Java、Go、Python 程序)里连localhost:6379,同样能通。这个方案适合日常开发,因为 WSL2 里跑的是官方 Linux 版,和你服务器上的行为完全一致,调试缓存失效、Lua 脚本、ACL 这些问题,不会出现“本地好好的,上服务器就怪怪的”情况。
特别提醒:WSL2 的 localhost 转发对宿主机访问没什么问题,但局域网内其他机器访问 WSL 里的 Redis 需要额外端口转发配置,这个比较复杂,建议需要局域网访问时用 Docker 或 Windows 原生方案。
4. 方案三:Docker Desktop 拉镜像跑容器
4.1 Docker 部署 Redis 的完整命令
如果你的开发环境本来就装了 Docker Desktop,那 Running Redis 是三个方案里最干净的一个。因为 Docker 镜像里的 Redis 就是官方原版,版本想换就换,想停就停,对 Windows 主机没有依赖。
安装 Docker Desktop 后,直接执行:
docker run -d --name redis7 -p 6379:6379 redis:7如果本地没有redis:7镜像,Docker 会自动从镜像仓库拉取。执行完这条命令,Windows 侧就能通过localhost:6379访问容器里的 Redis。验证一下:
docker exec -it redis7 redis-cli ping返回PONG即成功。
要限制内存,可以在 run 的时候加参数:
docker run -d --name redis7 -p 6379:6379 --memory=512m redis:7 --maxmemory 256mb注意命令格式:--memory是容器内存限制,--maxmemory是 Redis 自身能用的最大内存。这里的redis:7镜像默认配置不会开启持久化,如果你要留着数据,得用下面的方式挂载持久化目录和配置文件。
4.2 挂载配置文件与数据目录要注意的问题
我建议把配置和数据都落到宿主机,这样容器删了也不慌。假设在D:\docker-data\redis7下建两个子目录conf和data:
mkdir D:\docker-data\redis7\conf mkdir D:\docker-data\redis7\data然后准备一个redis.conf放到conf目录下,内容至少包含:
appendonly yes appendfilename "appendonly.aof" dir /data启动命令改成:
docker run -d --name redis7 \ -p 6379:6379 \ -v D:/docker-data/redis7/conf/redis.conf:/etc/redis/redis.conf:ro \ -v D:/docker-data/redis7/data:/data \ redis:7 redis-server /etc/redis/redis.conf这里容易出两个问题:一是 Windows 路径需要写成D:/而不是D:\,Docker 对反斜杠的处理不够友好;二是dir /data必须和容器内挂载路径严格对应,否则 RDB 或 AOF 文件会写到一个容器重启就丢的临时目录里。
Docker 方案对我来讲最大的价值在于版本切换成本极低。今天用redis:7.2,明天用redis:7.4,只要改一下标签重新 run 就行,Windows 上没有任何残留。
5. 方案四:Memurai——面向生产环境的商业备选
5.1 Memurai 适合谁
如果公司强制要求在纯 Windows 服务器上提供 Redis 兼容服务,且不想引入 WSL 或 Docker 这两层虚拟化,Memurai 可能是最接近“官方体验”的选项。它是一个完全跑在 Windows 上的 Redis 兼容服务,支持 Redis 7 的主要 API,并且能注册为 Windows 原生服务、通过 SC 命令管理。
安装过程就是下载一个 MSI 安装包,一路 Next 就行。启动服务、连接方式都和 Redis 一致:
memurai-cli ping不过要提醒一句:Memurai 的商业授权是需要费用的,免费版有容量或功能限制。我个人只在给客户做纯 Windows 环境交付时用过它,日常开发完全没必要上这个,ZIP 版或 Docker 就够了。
6. 别急着跑,先把这个配置文件调明白
6.1 必改的几个参数:bind、protected-mode、requirepass
不管是哪个方案,Redis 7 有一组参数你一定绕不开,它们在默认情况下可能埋雷。
第一个是protected-mode。Redis 7 默认是protected-mode yes,如果没设置密码,同时监听地址是0.0.0.0,那局域网内所有机器都能裸连,一旦被扫描到,你的 Redis 就会被脚本入侵写挖矿程序。这个我在踩坑记录里见过太多回了。
第二个是bind。默认只绑127.0.0.1,这意味着本机以外的机器都无法连接。如果你只是本地开发,保持默认就行;如果是开发服务器或测试机,需要明确绑定内网 IP 并开启密码。我建议默认情况下什么都别动,按需打开。
第三个是requirepass。Redis 7 里更强的是 ACL,但新手阶段直接设一个密码最省事。编辑配置文件加一行:
requirepass your-strong-password设置后,redis-cli连接时需要先认证:
redis-cli -a your-strong-password或者连接后执行:
AUTH your-strong-password安全建议说得直接一点:只要 Redis 监听地址不是 127.0.0.1,就必须开启密码,否则和裸奔没有区别。
6.2 持久化与内存上限别忽略
Redis 本质是内存数据库,进程一退,内存里的数据就没了。Redis 7 提供两种持久化机制:
- RDB:按时间点做全量快照,默认开启,适合缓存场景。
- AOF:按操作日志追加记录,可配置每次都同步或每秒同步,数据丢失窗口更小。
开发环境默认 RDB 就够了,但如果你在上面存了会话状态、临时验证码这类不希望丢的数据,建议打开 AOF:
appendonly yes appendfsync everysec内存上限也是容易被忽略的一项。默认 Redis 不限制内存,会一直把系统的内存吃满,直到触发 swap 或者进程被系统杀。开发机上随手设置一个上限更安全:
maxmemory 256mb maxmemory-policy allkeys-lruallkeys-lru表示内存满时按 LRU 淘汰最近最少使用的 key,这是最常见的缓存策略。
6.3 多实例部署与 ACL 基础
Redis 7 的多实例习惯其实很常见:一个端口 6379 做缓存,一个端口 6380 做队列,两个实例可以共用一份配置风格。在 Windows 上用 ZIP 版时,复制整个目录,改一下配置文件里的port和dir,分别注册成不同服务名就行。
ACL 是 Redis 6 开始引入、7.0 里非常完善的一套用户权限体系,它可以替代传统的requirepass。举个最简单的例子,创建一个只能读写指定前缀 key 的用户:
ACL SETUSER appuser on >app-password ~cache:* +@read +@write这样即使密码泄露,用户也不能执行FLUSHALL、KEYS *这类破坏性命令,也不能访问cache:前缀以外的数据。真正做多应用共享 Redis 时,强烈建议用 ACL 代替通用密码。
关于 ACL 和requirepass的关系:默认的default用户密码就是requirepass设置的值。如果你配置了 ACL 用户,旧的requirepass仍然只作用于default用户,两者不冲突,但管理起来建议统一走 ACL。
7. 常见问题与排查实录
7.1 端口 6379 被占用
启动redis-server.exe时如果报了bind: Address already in use,或者服务启动后怎么都连不上,先看端口谁在占用。Windows 下用:
netstat -ano | findstr 6379查到一个 PID 后,到任务管理器确认进程,如果不是重要任务,直接:
taskkill /PID 12345 /F再把 Redis 启动起来。还有一种情况是你以前安装过老版 Redis 并注册成了 Windows 服务,开机自动占用了 6379,那就先用redis-server --service-uninstall把旧服务清掉。
7.2 客户端连不上:三个最常见的死法
第一种是Windows 防火墙拦了。如果你从局域网另一台机器连 Windows 上的 Redis,连不上基本就是防火墙挡了 6379。临时放行:
netsh advfirewall firewall add rule name="Redis6379" dir=in action=allow protocol=TCP localport=6379第二种是Redis 配置了只监听 127.0.0.1。这个从客户端角度很不好分辨,因为本机连是通的,远程连就不通。排查时先看配置文件里的bind,再考虑是否要改成内网 IP。不要改成0.0.0.0还开了保护模式,否则必须配合密码使用。
第三种是redis-cli 连接时没有带密码。表现是NOAUTH Authentication required。这时执行AUTH 密码再操作即可。如果是程序连接,检查连接字符串里有没有配密码。
还有一个 Win11 上容易遇到的坑:Hyper-V 防火墙规则。如果你开了 WSL2 或 Docker,它们的虚拟交换机可能影响端口转发,表现是 Docker 端口映射明明写了6379:6379,Windows 本机却访问不到。先把 Docker Desktop 的“Use the WSL 2 based engine”关掉再重启试试,或者直接把端口映射改成127.0.0.1:6379:6379来规避。
7.3 服务注册失败与开机不启动
ZIP 版本用--service-install注册服务时最容易遇到以下报错:
| 报错信息 | 原因 | 处理方式 |
|---|---|---|
Failed to install service | 没有管理员权限 | 用管理员身份重开终端 |
Access is denied | 同上或杀毒软件拦截 | 关闭杀软后重试 |
Service 'Redis7' (Redis7) failed to start | 配置文件路径不对或配置有语法错误 | 用redis-server D:\redis7\redis.windows.conf前台启动看报错 |
| 服务启动了但连不上 | 配置里绑定的是别的端口 | 检查配置port和实际连接的端口 |
还有一种常见情况是:你手动注册了一个名为 Redis 的服务,后来卸载、更新版本时旧服务没删干净,导致新版本怎么都起不来。这时候用sc query和sc delete把旧服务清理干净再重新注册:
sc query Redis7 sc delete Redis77.4 图形化客户端和连接测试的小工具
命令行用redis-cli够用,但可视化查看 key、分析内存占用时,图形客户端效率高很多。我日常用两款:
- RedisInsight:Redis 官方出品的跨平台客户端,支持 Redis 7 的 ACL、慢日志、命令监控,强烈推荐。
- Another Redis Desktop Manager:老牌开源,轻量,连接管理方便。
本地连通性测试其实不需要装额外工具。Windows 上可以直接用 PowerShell 的Test-NetConnection:
Test-NetConnection -ComputerName 127.0.0.1 -Port 6379返回TcpTestSucceeded : True说明端口通,否则就是服务没起来或防火墙在拦。排查顺序建议是:先redis-cli ping看服务状态,再看端口监听,最后看防火墙。
最后说一点我个人实践下来的经验
玩 Windows 上的 Redis 这么多年,我的体会是:别在“哪个版本更纯正”上纠结太长时间,先保证跑起来、数据不丢、端口不乱开,后面慢慢优化就来得及。如果你只是自己开发调试,ZIP 解压版是性价比最高的选择,用 Docker 做版本切换作为补充;如果你的项目上了服务器,直接记牢 WSL2 里service redis-server start这个命令就够了。最后再分享一个小技巧:不管是哪种方式装的 Redis,拿到手第一件事先执行CONFIG REWRITE,把当前运行参数同步回配置文件,这样下次启动时的实际行为和你预期完全一致,很多“玄学报错”都是配置文件和运行参数不一致引起的。