十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Windows安装Redis全攻略:从解压版到Docker方案及常见问题排查

Windows安装Redis全攻略:从解压版到Docker方案及常见问题排查 0. 写在前面先搞明白Windows装Redis这件事的坑在哪说到Redis后端开发几乎没人不知道。内存数据库、缓存、分布式锁、消息队列它一个不落全占了。很多朋友在Linux服务器上装Redis顺手得很一条apt install redis-server或者编译安装就完事但一换到Windows麻烦就来了。Redis官方压根不提供Windows版本。官网下载页面只有Linux、macOS的包Windows用户第一次去找下载入口十有八九会懵。再加上网上搜出来的教程五花八门有让装WSL的、有让装Docker的、有让用第三方移植版的版本还新旧不一照着抄都可能翻车。这篇文章把我自己在Windows上装Redis的全部经验整理出来覆盖下载渠道、版本选择、安装步骤、配置修改、注册服务、可视化客户端以及常见报错的排查思路。无论你是刚入门想在本机搭个环境练练手还是工作中需要在Windows开发机上跑一套Redis做联调都可以直接照着操作。我会把每个方案背后的原理和适用场景也讲清楚这样你下次遇到问题就能自己判断而不是只会复制粘贴命令。1. 为什么官方不支持Windows以及主流的三个落地方案1.1 官方不认Windows的来龙去脉Redis的官方文档里写过一句很直接的话Redis是在Linux上开发的官方不支持Windows平台。原因一是Redis的很多底层特性依赖Linux的机制比如fork()系统调用用来做持久化时的子进程快照Windows没法原生支持原因二是官方团队认为生产环境就该跑在Linux上为Windows做适配投入产出比太低。但这不代表Windows上完全没法用。目前社区里主流的做法有三条路我分别说下它们的本质你就能根据自己的情况选了。1.2 三条路的对比与选型思路第一条路使用第三方移植版微软曾经在2016年左右维护过一个Windows版的Redis叫Redis on Windows后来停更了。现在GitHub上最活跃的Windows移植版是tporadowski/redis基于Redis 5.0.x的代码的拉取维护提供了完整的安装包和解压版。这条路的特点是安装最快、最接近原生体验、适合本机开发和测试。需要注意的是这个移植版的版本号停在5.0.x和当前Linux上的7.x/8.x相比有差距新特性比如Redis Stack的JSON、Search模块是没有的。但常规的缓存、队列、锁这些核心功能完全够用。如果你想用更高级的数据类型和模块就得看后面两条路。第二条路用Docker跑官方镜像Docker Desktop装好之后docker run redis:7.4一条命令就能拉官方镜像跑起来。这条路的好处是版本新、和Linux生产环境完全一致、不会遇到Windows的兼容问题。坏处是你得先装Docker Desktop而且Docker Desktop本身对系统配置有要求Windows 10/11 64位、开启虚拟化、WSL 2等。对想认真学Redis的开发者来说我其实更推荐这条路后面我会专门写一节。第三条路用WSLWindows Subsystem for Linux在Windows里装一个Ubuntu子系统然后在子系统里用Linux的方式装Redis。这条路最接近生产环境但操作链路长涉及WSL发行版安装、systemd配置、端口转发等一堆细节新手容易被绕晕。我的建议是如果你已经在用WSL做开发了那顺手在里头装Redis很合适如果只是为了用Redis去装WSL性价比不高不如走前两条路。为了照顾大多数读者的需求这篇文章的主体讲第一条路也就是第三方移植版因为它是Windows用户最容易上手、步骤最直接的方式。第二条路的详细操作放在后面的进阶章节。2. 下载前的准备版本号、下载渠道、文件识别2.1 Redis版本号怎么看该选哪个Redis的版本号采用的是语义化版本比如5.0.14.1主版本号是5次版本号是0补丁号是14最后还可能有个维护号。主版本号不同功能差异会很大比如4.x才支持混合持久化5.x引入了Stream数据类型。对我们Windows用户来说能选到的移植版主要是5.0.x够用就好不用纠结版本新旧。如果你决定用Docker方案那就建议选官方镜像的稳定版本比如redis:7.4或者redis:7.2别用latest标签因为latest指向的版本会变化今天装的和明天装的可能是不同版本复现环境的时候容易出幺蛾子。2.2 下载渠道官方渠道和第三方渠道怎么认我需要强调一点Redis官网redis.io本身不直接提供Windows安装包。官网的Downloads页面只给Linux和macOS的链接。Windows用户要下载认准GitHub上的tporadowski/redis这个仓库就行。进入仓库页面后点击右侧的Releases里面会有多个版本的发布记录。每个release下面一般提供两种文件Redis-x64-x.x.x.msiMSI安装包双击就能装会自动注册Windows服务Redis-x64-x.x.x.zip免安装版本解压就能用更灵活我个人的建议是下载ZIP版。原因有几个免安装版不写注册表、不改系统环境变量卸载就是删文件夹干净利落而且你可以把Redis放在任意目录多个版本并存互不干扰配置文件在解压目录里方便直接改出问题也好排查。MSI版虽然装起来省事但它默认装到C:\Program Files\Redis改配置要管理员权限反而麻烦。这里再提醒一句网上下载Redis时凡是要求你注册账号、付费、或者跳转到不明站点的基本都是坑。认准GitHub官方仓库的Releases页面即可。3. 方案一解压版安装和基础配置实操3.1 解压到目标目录确认目录结构ZIP包下载完成后解压到一个你方便管理的目录比如D:\Redis或者C:\Redis。解压后你会看到一堆文件常见的有redis-server.exe服务端程序核心中的核心redis-cli.exe命令行客户端用来连接和操作Redisredis-benchmark.exe性能测试工具redis-check-aof.exe、redis-check-rdb.exe持久化文件检查修复工具redis.windows.conf、redis.windows-service.conf配置文件我个人习惯把解压目录改个名比如redis-5.0.14.1然后建议把目录放到一个纯英文路径下。如果路径中含有中文或空格后续在某些脚本和工具里容易出奇怪的编码问题这个坑我踩过不少次提前避免。3.2 第一次启动使用默认配置验证环境打开一个命令行窗口WinR输入cmd回车或者用Windows Terminal切换到Redis目录执行redis-server.exe如果一切正常你会看到Redis的启动日志包括版本号、运行模式、端口号默认6379、进程ID等。看到Server initialized和Ready to accept connections这两行就说明Redis已经成功启动了。这时候另开一个命令行窗口进入同样的目录执行redis-cli.exe ping如果返回PONG恭喜你Redis已经跑起来了。这个ping/pong是Redis自带的连通性测试命令就像你跟服务说“在吗”它回你“在”。3.3 基本配置修改密码、端口、持久化默认配置下Redis可以直接连接没有密码这在本地学习时没什么问题但如果你的开发机在网络里别人也能扫到6379端口并连接那就危险了。所以即使本机使用我也建议至少做三件事改端口、设密码、开启持久化。修改配置文件用文本编辑器打开redis.windows.conf找到并修改以下几项# 端口号默认6379建议改成自定义端口减少被扫描的风险 port 6379 # 绑定地址默认是127.0.0.1表示只允许本机连接 bind 127.0.0.1 # 设置密码取消注释并按需修改 requirepass yourpassword # 开启RDB快照持久化默认已有保持开启即可 save 900 1 save 300 10 save 60 10000这里解释一下requirepass设置后所有客户端连接都必须先执行AUTH yourpassword命令验证身份否则任何读写操作都会被拒绝。生产环境这是最基本的安全底线。用配置文件启动改完配置后用以下命令启动让Redis加载这个配置文件redis-server.exe redis.windows.conf启动后用客户端验证密码是否生效redis-cli.exe -p 6379 # 此时执行 ping 会提示 NOAUTH Authentication required auth yourpassword # 返回 OK ping # 返回 PONG或者也可以直接一句话带密码连接redis-cli.exe -p 6379 -a yourpassword ping-a参数直接带密码但命令行中会明文显示密码正式场合要注意这里本地测试无所谓。3.4 手动启动的问题窗口一关Redis就没了直接用redis-server.exe启动RedisCMD窗口会被前台进程占住一旦关掉窗口Redis就停了。这在你需要长期跑Redis做开发时非常不方便。解决方法是把Redis注册成Windows服务让它在后台自动运行开机自启像Linux上的systemctl start redis一样。这一节放在后面单独讲。3.5 顺手验证一下Redis的核心功能装好之后建议用几个最常用的命令确认基本功能正常这样后面学redis数据类型、redis分布式锁这些进阶内容时心里有底# 设置一个字符串键 set user:name zhangsan # 获取键值 get user:name # 给键设置过期时间60秒后自动删除 expire user:name 60 # 查看键的剩余生存时间 ttl user:name这里多说一句ttl返回-2表示键不存在-1表示键没有设置过期时间正数表示剩余的秒数。这些命令在后面的各类Redis教程里会反复出现提前在本地敲一敲手感会好很多。4. 方案二注册成Windows服务实现开机自启4.1 使用Redis自带的服务安装脚本tporadowski/redis这个仓库的ZIP包里面没有直接提供安装服务的exe但有个办法它以MSI方式安装时会自动注册Windows服务。如果你下载的是ZIP版就需要借助系统自带的sc命令或者微软的WinSW工具来注册服务。我个人推荐使用WinSWWindows Service Wrapper它的原理很简单用一个配置文件描述你要运行的程序、服务名、启动参数然后把它注册成Windows服务由Windows服务管理器来负责拉起和守护进程。4.2 用WinSW把redis-server注册成服务第一步去GitHub搜索winsw/winsw下载对应版本的exe文件比如WinSW-x64.exe把它放到Redis目录下并重命名为redis-service.exe名字随意方便识别就行。第二步在同一目录创建一个配置文件redis-service.xml内容参考如下service idRedis/id nameRedis/name descriptionRedis Server Service/description executableD:\Redis\redis-server.exe/executable argumentsD:\Redis\redis.windows.conf/arguments logmoderotate/logmode onfailure actionrestart delay10 sec/ /service重点看两个地方executable要写你机器上redis-server.exe的完整路径arguments要写配置文件的完整路径。路径中的反斜杠记得用双反斜杠转义或者改用正斜杠D:/Redis/redis-server.exe能省去不少转义的坑。第三步以管理员身份打开命令行进入Redis目录执行安装命令redis-service.exe install看到Installing service和Service Redis was installed successfully之类的输出就说明服务注册成功了。第四步启动服务redis-service.exe start或者也可以在Windows服务管理器中找到名称为Redis的服务手动点击启动并把启动类型改成“自动”。4.3 服务生效后怎么验证服务启动后可以用命令行工具确认状态sc query Redis输出里STATE如果显示RUNNING说明服务正在运行。这时候你关掉电脑再开机Redis也会自动在后台启动不再需要手动开窗口了。如果后续想改配置改完redis.windows.conf后需要重启服务让它生效redis-service.exe stop redis-service.exe start或者简单点用sc stop Redis sc start Redis。4.4 服务方式下配置文件的注意事项如果你用redis.windows-service.conf这个文件作为服务配置需要额外注意持久化路径相关设置。因为我遇到过一种情况服务模式下Redis的工作目录不是解压目录而是C:\Windows\System32导致RDB持久化文件dump.rdb被写到了系统目录里找半天找不到数据文件。解决方法是在配置文件中明确设置dir参数# 指定持久化文件的存放目录 dir D:/Redis/data同样日志文件如果开启了也建议指定绝对路径# 日志文件路径 logfile D:/Redis/logs/redis.log这里用正斜杠写法Redis在Windows下对正斜杠兼容很好不容易踩转义坑。记住这个经验后面排查“数据怎么丢了”或者“日志跑哪去了”这类问题时能省一大半功夫。5. 可视化客户端的选型和连接配置实战5.1 命令行再好用调试时还是想要图形界面Redis自带的redis-cli.exe很好用但看键值列表、查看过期时间、浏览类型时效率太低。尤其刚开始学Redis的人对着黑窗口敲命令很难直观感受到“我在内存里存了什么”。所以我很建议装一个可视化客户端工具来辅助学习和联调。5.2 几个主流客户端的对比Redis Desktop ManagerRDM老牌工具知名度最高但新版改为付费订阅制免费版功能受限用起来硌得慌。Another Redis Desktop ManagerARDM开源免费的跨平台Redis客户端UI清爽连接管理、键值浏览、终端执行这些功能都齐全我现在主力就是它。RedisInsightRedis官方出的可视化工具功能强大支持Redis Stack模块的图形化操作缺点是对新手来说界面信息有点重。如果你问我选哪个本地开发和日常调试我推荐Another Redis Desktop Manager理由很简单免费、够用、更新勤快。下载的话同样去GitHub找它的Releases页面Windows版本选RedisDesktopManager-Windows-*.exe即可。5.3 用ARDM连接Redis的实际步骤装好ARDM后打开软件点击新建连接需要填几个关键信息连接名随便起比如“本地Redis”地址如果Redis在你本机填127.0.0.1端口默认6379如果改了配置就填改后的端口密码如果设置了requirepass这里填对应的密码填完之后点击测试连接如果成功会看到响应时间之类的信息。保存后双击连接就能在左侧树形列表里看到数据库的键点击具体键能在右侧查看值还能支持看TTL、修改值、删除键。对学习和调试来说这个体验比命令行了好了不止一个档次。5.4 连接不上时先检查这三处很多人第一次用可视化客户端连接失败原因通常不是客户端问题而是Redis配置问题。检查顺序如下Redis是否真的启动了命令行执行tasklist | findstr redis-server确认进程存在端口是否对得上确认配置文件里的port和你填的客户端端口一致绑定地址是否允许如果Redis配置了bind 127.0.0.1就只能本机连局域网其他机器连不上是正常的这里要特别说明bind参数它限制的是Redis监听在哪个网络接口上。默认127.0.0.1意味着只监听本机回环地址外网和局域网都无法访问这是最安全的本机开发配置。如果你确实需要让局域网内的其他机器连接比如你在虚拟机里跑Redis宿主机要连可以改成bind 0.0.0.0但前提是你已经设了requirepass否则相当于把Redis裸奔暴露在局域网里这个口子不要随便开。6. 常见问题与排查技巧实录6.1 redis-server.exe双击闪退双击redis-server.exe窗口一闪而过什么都看不清。这个问题特别常见尤其是新手。原因一般是两种一是没有加载配置文件时默认配置有问题二是端口被其他进程占用Redis启动时报错退出窗口瞬间关闭看不到报错内容。解决办法不要双击打开命令行手动运行这样报错会留在窗口里cd /d D:\Redis redis-server.exe redis.windows.conf如果端口被占用启动日志会显示Could not create server TCP listening socket *:6379: bind: No error或者Address already in use之类的信息。解决方法是换端口或者找到占用端口的进程并处理它netstat -ano | findstr 6379看到占用端口的PID之后去任务管理器里查一下这个PID对应的程序确认无误后结束进程就行。如果有别的应用在用6379我建议优先考虑改Redis端口而不是杀进程毕竟你也不知道那个进程是干嘛的。6.2 连接时报错NOAUTH Authentication required这个问题最容易出现在设置了密码之后。设置requirepass后所有客户端包括redis-cli连接上来都必须先执行AUTH否则连ping都会被拒绝返回NOAUTH Authentication required。第一次遇到这个报错我的经验是先确认三件事连接时是否带了密码redis-cli.exe -a 你的密码 ping密码是否写对确认配置文件和实际输入一致注意别有多余空格配置文件是否真的被加载如果你直接启动redis-server.exe没带配置文件参数那配置里的密码就不会生效连接理论上应该是不需要密码的如果这时还报NOAUTH那说明密码来自其他地方的配置另一种情况恰好相反你明明设置了密码连接却提示ERR Client sent AUTH, but no password is set。这说明Redis启动时根本没加载你改过的配置文件。我见过有人改完redis.windows.conf启动时却忘了指定配置文件直接用默认配置跑了结果密码自然不生效。教训就是改配置后必须用redis-server.exe 配置文件路径这样启动或者重启Windows服务。6.3 配置文件改了半天就是不生效这个坑我踩过很多次单独拿出来说。save、maxmemory、appendonly这些参数改完配置后看起来没问题重启服务后却不生效通常原因就两个一是改错了文件。Windows移植版自带的配置文件比较多可能有redis.conf、redis.windows.conf、redis.windows-service.conf你改的是A文件启动和服务用的是B文件自然不生效。我建议只保留一个配置文件其他没用的改名备份或者删掉彻底避免混淆。二是文件编码问题。用Windows自带的记事本编辑配置文件保存时默认编码可能是ANSI或UTF-8带BOMRedis解析某些编码时会把配置项头尾带上奇怪的字符导致解析失败。推荐用VS Code或者Notepad打开配置文件保存时选择UTF-8无BOM编码能避免很多莫名其妙的毛病。6.4 持久化文件去哪了数据为什么丢了前面提到过dir参数问题。Redis的RDB快照文件默认叫dump.rdb会写到dir指定目录。如果你没配置dir在服务模式下工作目录可能是C:\Windows\System32然后你重启机器后发现数据好像没了其实是快照文件被写到了系统目录里你没找到它以为数据丢了。排查时用Redis客户端执行下面这个命令直接看运行时的实际配置config get dir config get dbfilename返回的路径就是当前Redis实例真正的持久化目录。发现问题后在配置文件中加上dir D:/Redis/data重启服务然后先手动执行一次save触发生成快照确认文件落在预期目录里这就稳了。6.5 常见问题速查表现象可能原因排查思路redis-server.exe闪退端口被占用 / 配置错误命令行运行看报错netstat查端口连接提示NOAUTH设置了密码但没带AUTH用-a带密码连接确认密码正确设置了密码但不生效加载了错误的配置文件检查启动命令和配置文件路径局域网连不上bind限制只监听本机确认bind配置设置密码后谨慎开放数据重启后丢失dir目录不对或快照未触发config get dir查看实际目录手动save验证配置文件中文乱码编码错误用UTF-8无BOM保存配置文件7. 进阶玩法用Docker跑官方Redis镜像7.1 为什么要用Docker方案如果你不是只想装个Redis玩玩而是打算往深了学或者你希望本机环境和Linux生产环境保持一致那么Docker方案是更优的。官方镜像持续在更新版本和模块都是最新的你在本机验证过的配置和命令到了服务器上基本能无缝迁移。而且用Docker容器跑Redis还有一个好处容器挂掉就删掉重建配置和数据用卷挂载管理环境想怎么折腾都不怕弄脏宿主机。7.2 前置条件装好Docker Desktop在Windows上用Docker最常规的方式是安装Docker Desktop。安装前需要确认系统开启虚拟化安装过程中Docker Desktop会引导你启用WSL 2后端这一步跟着向导走就行。装完后打开命令行验证一下docker --version能正常输出版本号就说明环境OK了。7.3 一条命令启动Redis容器拉取并启动官方Redis镜像推荐用docker run指定版本docker run -d --name redis-test -p 6379:6379 redis:7.4解释一下各个参数-d后台运行--name redis-test给容器起名字便于后续管理-p 6379:6379把宿主机6379端口映射到容器内6379端口这样本机的Redis客户端就能直接连redis:7.4镜像名和版本标签启动后用docker ps确认容器状态再用docker logs redis-test看启动日志。然后用本机的redis-cli连接redis-cli.exe -p 6379 ping如果返回PONG说明容器内的Redis正常对外提供服务了。7.4 带密码、持久化和配置文件的完整启动方式如果要设密码和持久化命令会长一些docker run -d --name redis-test -p 6379:6379 \ -v D:/redis-data:/data \ -v D:/redis-config/redis.conf:/etc/redis/redis.conf \ redis:7.4 redis-server /etc/redis/redis.conf \ --requirepass yourpassword --appendonly yes这里的-v参数把宿主机目录挂载进容器D:/redis-data用来存持久化文件D:/redis-config/redis.conf是宿主机上的配置文件容器启动时读取它。--requirepass和--appendonly作为命令行参数直接传给Redis。用Docker方案还有一个好处就是你可以在本机同时跑多个Redis实例各开各的端口用来测试redis主从复制、redis哨兵、redis集群这些进阶场景非常方便。比如模拟一主一从再起一个容器docker run -d --name redis-slave -p 6380:6379 \ redis:7.4 redis-server --slaveof 127.0.0.1 6379容器启动时会去连接6379那个实例并复制数据一个简单的主从就搭起来了。这种调试方式在本地学习阶段几乎是神器。7.5 Docker运行Redis时的踩坑提醒有几个细节我要专门提醒第一Windows下挂载目录的路径建议用正斜杠并注意权限问题。Docker Desktop在Windows上的文件挂载走的是虚拟化文件系统某些场景下会有文件同步的性能开销但存Redis数据文件这种小体量操作完全够用。第二容器内Redis默认配置没有密码-p 6379:6379映射出去后同网段的机器可能扫到你的端口。本地学习无所谓如果机器在不太安全的网络环境务必加上--requirepass。第三容器删除后挂载在/data目录里的RDB和AOF文件会留在宿主机上换容器或者重建时不会丢数据。这也是我推荐把数据挂载出来的核心原因否则docker rm一下数据就真的没了。8. 环境变量配置攻略8.1 为什么建议把Redis目录加入PATH每次使用redis-cli.exe都要cd到Redis目录或者输入完整路径时间长了很烦。把Redis目录加入系统环境变量PATH之后就可以在任何目录下直接敲redis-cli或redis-server命令体验一下子上来了。8.2 手动配置环境变量的步骤在Windows搜索框里输入“编辑系统环境变量”打开后点击“环境变量”在“系统变量”里找到Path编辑并新增一行填上你的Redis解压目录比如D:\Redis。点击确定保存后新开一个命令行窗口执行redis-cli -v能输出版本号就说明配置成功了。这里有个小坑改完环境变量后已经打开的命令行窗口不会自动刷新新配置必须重新打开一个新的窗口。很多朋友改了半天在旧窗口里试怎么都不生效还以为是配置出错了其实就是没开新窗口的问题。8.3 环境变量配置的安全提醒配置环境变量时尽量只加Redis这一个程序目录不要随意把各种乱七八糟的目录塞进去。PATH里加的东西越少越不容易出现命令冲突。我遇到过一种情况电脑上装了多个Redis版本工具PATH里同时存在两个Redis目录结果命令行敲redis-cli进去的版本和自己以为的不一致查了半小时才反应过来。解决办法是让PATH里只保留一个你想用的Redis目录。9. 个人经验总结这套Windows装Redis的流程我自己在不同电脑上反复装过不下十次从最早的微软移植版到现在的社区维护版再到后来大部分时间用Docker方案。总结下来核心经验就三条第一明确自己的使用场景再选方案。只是本机跑一跑学语法、做联调ZIP解压版加WinSW注册服务是最省心的组合要学高级特性、要贴近生产环境直接上Docker官方镜像少走弯路。WSL适合本身就在用WSL开发的人纯为Redis去折腾WSL不划算。第二配置文件是所有问题的根源。端口、密码、持久化、绑定地址99%的疑难杂症都出在配置上。所有改动都遵循一个原则改之前先确认你改的是哪个文件启动时再确认加载的是哪个文件用config get命令验证最终生效的值。就这一条能帮你省掉大半的排查时间。第三数据安全这根弦从第一天就要绷紧。无论用哪种方式跑Redis持久化文件的落盘目录一定要显式指定密码一定要设。很多初学者在本机装完Redis就以为完事了等到数据丢了、被扫了才知道痛。开发环境就是练习生产环境的好时机该有的规矩一个都别省。最后再分享一个小技巧。当你装好Redis之后可以在命令行里跑一下自带的性能测试工具感受一下内存数据库的极限速度redis-benchmark.exe -n 100000 -c 50这个命令会模拟50个并发连接、执行10万次请求你会看到Redis每秒处理的请求数轻松过万。看到这个数字的时候你大概就理解为什么Redis能成为后端架构里不可或缺的一环了。接下来不管是研究数据类型、做分布式锁还是看面试题至少你的环境已经准备好了剩下的就是动手去玩。
返回列表