ARTICLE DETAIL

资讯详情

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

Windows安装Redis全指南:从选包、配置服务到避坑实操

Windows安装Redis全指南:从选包、配置服务到避坑实操 在Windows上装Redis这件事说难不难说简单也真有不少坑。我最早接触Redis是在Linux服务器上一条apt install就装完了后来换了Windows环境做本地开发第一次在Windows下装Redis就懵了——官网下不到Windows安装包网上教程版本五花八门有些下载站还夹带私货。折腾了整整一下午才把环境跑起来回头一看其实核心步骤就那么几步只是没人把坑提前踩一遍。这篇文章就是把我那次以及后来多次在Windows上部署Redis的经验完整梳理一遍从安装包选择、服务注册、配置修改到可视化客户端连接按真实操作顺序写清楚配上排查思路给同样需要在Windows下用Redis的人一份能直接抄作业的参考。1. 为什么Windows安装Redis不是一件傻瓜操作1.1 先说清楚Redis官方其实并没有Windows版本很多人第一次找Redis的Windows安装包时都会困惑明明官网就在那下载页面却只有Linux、macOS的源码包和二进制包Windows去哪了这不是你眼花了而是Redis官方确实没有维护Windows版本。原因在于Redis底层大量使用了Linux特有的系统能力比如fork()系统调用用来做持久化时的后台快照以及epoll事件驱动模型用来高效处理高并发网络连接。这两样东西在Windows内核里没有对应实现强行移植等于把异步I/O和进程模型重写一遍维护成本极高。所以官方的态度一直是Windows上想用Redis请用虚拟机或者WSL。但实际开发中大家又确实需要Windows本地环境。于是出现了两个主要来源一是微软曾维护过一个Windows移植版后来移交给开源社区继续维护二是Memurai这类商业兼容方案。国内大量教程里提到的Redis-x64-xxx.zip绿色版就来自社区维护的Redis for Windows项目。这个移植版虽然不官方但在本地开发和测试场景下完全够用我的经验是稳定性和功能都很接近官方Linux版日常缓存、队列、分布式锁测试都没问题。1.2 几种安装方案的底层层级对比选方案之前最好先看清各路方案的适用边界我列个对比表方便你按自己的场景快速决策方案安装复杂度性能接近官方程度适合场景社区MSI/ZIP安装包低较好功能一致底层有差异本地开发、教学、测试WSL2内装官方Linux版中最好完全一致需要与Linux环境保持一致Docker Desktop跑Redis容器中好完全一致依赖容器化的工作流Memurai低较好API兼容需要官方商业支持的极端场景这里重点说下WSL2和Docker。WSL2本质上是个轻量虚拟机里面跑的是真正的Linux内核所以你可以在里面安装官方原版Redis行为表现和生产环境完全一致。Docker Desktop在Windows下也是基于WSL2后端效果类似。这两个方案的好处是干净、可控、不会污染Windows系统环境坏处是内存占用偏高而且如果你不熟悉Linux命令行后面的配置和运维反而更麻烦。而社区MSI/ZIP安装包方案虽然底层不是官方代码但它提供Windows原生服务、直接注册开机自启、用Windows事件日志记录运行状态对不熟悉Linux的人来说非常友好。我做本地开发时多数场景就用社区安装包省心剩下的差异在应用层基本体现不出来。所以说没有绝对最好的方案关键是匹配你的使用环境和运维习惯。2. 安装包获取与前置环境准备2.1 版本选择不是越新越好社区维护的Windows版Redis目前常用版本集中在5.x到7.x之间。我的建议是如果你只是本地用选7.x的最新稳定版就好。7.0引入了不少重要特性比如WAIT命令的改进、更高效的内存碎⽚整理、以及面向集群的变动API和官方Redis保持同步文档也齐全。但如果你生产环境还在用旧版比如公司服务器上是Redis 5.x本地开发最好也装同大版本避免本地测试正常、一上服务器就因为命令差异翻车。判断一个版本是否稳最简单的办法是看release页面的发布时间和issue讨论。如果一个版本发布超过半年后续只有零星的bug修复很少再有功能性改动那基本就到了稳定期。相反刚发布不到一个月的版本哪怕标着stable也先让子弹飞一会儿。我在本地踩过一次坑装了个刚出的新版本结果客户端连接时偶发超时查了半天发现是那个版本的事件循环在Windows上有个已知bug后来换回前一个次版本就安静了。2.2 下载渠道从可靠来源获取安装包这里必须多说几句。Redis因为太热门网上搜Redis下载前排全是第三方下载站很多站点把老版本打包再塞一堆捆绑软件甚至有人二次打包过后门版本。你辛辛苦苦装完Redis是能跑了但系统多了全家桶严重的连数据库内容都能被远程读走。我的习惯是只从社区开源项目的GitHub releases页面下载认准文件名里带x64的MSI文件或ZIP压缩包。如果下载速度不理想用镜像站或者挂下载工具加速都行但一定要在本地核对两个东西一是文件大小是否和release页面上一致明显偏小就要警惕二是如果项目提供校验值顺手用PowerShell算一下哈希值做比对。以下命令可以快速计算文件哈希Get-FileHash .\Redis-x64-7.x.x.msi -Algorithm SHA256把输出的哈希值和release页面公布的比对一致才说明文件完整且未被篡改。这一步花不了两分钟却能帮你排除掉一大半的坑。另外尽量不要在局域网共享或者U盘里传来传去安装包来源不明的话哈希校验就是最后一道防线。2.3 安装前检查避免装完就跑不起来在正式安装前有两件事我建议先确认第一系统的VC运行库要装好。Redis Windows版本质是C/C写的原生程序依赖微软的Visual C Redistributable。Windows 10/11的较新版本通常自带但如果你用的是精简版系统或者长期没更新过很可能缺这个运行库。判断方法很简单直接双击MSI安装包如果安装过程中弹出缺少VCRUNTIME140.dll之类的报错那就是缺运行库先去微软官网把最新的VC Redistributable装好再继续。第二预留端口和内存。Redis默认监听6379端口安装前用以下命令确认这个端口没被占用netstat -ano | findstr 6379如果返回了一条LISTENING的记录说明端口已经被别的程序占了。这种情况要么先解决占用要么装好后修改Redis端口否则服务根本起不来。另外Redis虽然是轻量级数据库但如果你要做缓存压测或者存大量临时数据内存也要给它留够。默认配置下Redis可以无上限使用内存我见过有人本机装了Redis没配maxmemory跑了个批量任务直接把16G内存吃满整个系统卡到鼠标都不动。所以安装前想清楚它大概会吃多少内存心里有个数。3. 逐步实操完整安装配置流程3.1 从MSI安装包到完成安装拿到MSI安装包后双击运行。安装界面其实很朴素一路Next就能走完但有几个选项需要留意。安装向导会让选择组件和安装路径。默认会勾选把Redis目录加入系统PATH这一步我建议保留因为后面很多操作都要用到redis-cli、redis-server这类命令加进PATH后可以直接在任意目录调用省去每次输完整路径的麻烦。安装路径的话我习惯放在C:\Program Files\Redis或者D:\Redis这样的纯英文路径下避免中文路径在某些历史遗留目录下出现编码问题。虽然现代版本基本没这个问题了但能规避就不必冒险。安装完成后默认目录下会有几个关键文件redis-server.exe服务端程序核心进程redis-cli.exe命令行客户端用于连接和操作redis.windows.conf不带服务模式的配置文件redis.windows-service.conf以Windows服务方式运行时加载的配置文件注意这个区分一个是普通模式用的一个是服务模式用的。如果你手动改配置改错了文件服务重启后你会发现改了个寂寞。很多教程没强调这一点但在Windows服务模式下配置文件路径是在安装服务时通过命令行参数指定的同一台机器上完全可以有多套配置和服务并存理解这个逻辑后面排查问题会少走很多弯路。3.2 配置文件里最关键的几个参数安装完之后不要急着启动先打开redis.windows-service.conf看一眼。这个文件是Redis运行的主要依据改动后需要重启服务才生效。我不建议新手一上来就全篇通读那是几百行的英文注释只要抓住几个核心参数就够了。# 监听端口默认 6379 port 6379 # 绑定地址默认 127.0.0.1 bind 127.0.0.1 # 保护模式默认 yes protected-mode yes # 是否后台持久化到磁盘AOF appendonly no # 最大内存限制默认不限制 # maxmemory bytesport好理解Redis跑在哪个端口上。bind是用来控制允许哪些网卡上的连接进来的默认127.0.0.1也就是只能本机访问这样最安全。protected-mode是和bind配合的保护机制默认yes时在没设置密码且bind了公网地址的情况下Redis会拒绝远程访问。appendonly是持久化开关默认no意味着重启后内存里的数据会全部丢失——如果只是做缓存这没问题但要是存了重要数据务必改成yes并理解appendonly.aof文件就是你的数据恢复来源。maxmemory建议一定要设置比如maxmemory 512mb这是给Redis的内存使用上一个保险防止它把系统内存吃干。3.3 把Redis注册为Windows服务安装包其实已经帮你注册好了一个默认服务服务名通常叫Redis。但我仍然建议你手动操作一遍注册流程因为一方面你可以通过这个操作理解服务和工作模式的关系另一方面如果你后面需要跑多个Redis实例这个技能就是刚需。打开一个以管理员身份运行的PowerShell或CMD先进入Redis安装目录然后执行redis-server.exe --service-install redis.windows-service.conf --service-name Redis这条命令的含义我拆解一下--service-install表示注册服务后面的redis.windows-service.conf是该服务启动时要加载的配置文件--service-name Redis指定服务的名字。执行成功后系统里就多了一个名为Redis的Windows服务启动类型默认是自动也就是开机就会拉起。启动服务有两种方式一种是去服务管理界面services.msc里找到Redis右键启动另一种是命令行redis-server.exe --service-start --service-name Redis停止服务对应的命令则是--service-stop。我个人更喜欢命令行方式因为可以顺便把启动输出的状态信息拿到手一眼就能看出起没起来。3.4 安装后的第一轮验证ping通才算真的装好了服务启动后马上验证一下Redis到底能不能用。打开一个新的终端窗口输入redis-cli ping如果返回PONG说明服务正常响应。如果返回Could not connect to Redis at 127.0.0.1:6379说明服务没起来或者端口、bind配置有问题需要回到前面的步骤排查。之后我习惯再看一下当前服务的版本和基本信息redis-cli info server这个命令会返回一个文本块里面有redis_version、os、uptime_in_seconds等字段。看到os字段显示Windows或者win32就确认这个实例确实是Windows移植版在跑。同时看一下uptime_in_seconds如果是个很大的数字说明服务稳定运行很久了没怎么崩过。做完这步Redis就算正式跑起来了。4. 配置密码与访问边界4.1 为什么要设置requirepass默认情况下Redis没有密码谁连上就能读写。在只有本机能访问的环境下问题不大但有两个隐患一是本机上的其他恶意程序或不可信脚本可以直接连上去读取你的缓存数据比如把session、验证码这类敏感信息拖走二是一旦你把bind放宽到局域网整个局域网内所有人都能裸连。所以装好Redis之后设置密码应该是习惯性动作而不是可选项。在配置文件里找到这一行# requirepass foobared取消注释把foobared换成你自己的强密码比如requirepass YourStrongPassword123保存后重启Redis服务redis-server.exe --service-stop --service-name Redis redis-server.exe --service-start --service-name Redis重启完再执行redis-cli ping这一次不会直接返回PONG而是报错NOAUTH Authentication required。这是正常的因为你现在需要带密码连接了redis-cli -a YourStrongPassword123 ping返回PONG即正确。注意-a后面直接跟密码命令行可能会把这个参数记录到PowerShell历史里如果怕泄露也可以先不输密码进入交互模式再执行AUTH YourStrongPassword123。4.2 protected-mode、bind和防火墙的组合逻辑很多人搞不清楚bind和protected-mode到底怎么配合我用一句话讲明白bind决定Redis把服务暴露在哪个网络接口上protected-mode是在你没有显式配置密码和bind的裸奔状态下挡住来自非本机连接的兜底护栏。假设你想让局域网内其他机器访问这台Windows上的Redis有三个地方要同时改第一配置文件里bind改成0.0.0.0意思是监听所有网卡接口。注意0.0.0.0和127.0.0.1的区别前者等于对外广播后者只在本机回环接口上监听。第二requirepass必须有值。如果你设了密码protected-mode yes就不会拦你。如果你图省事不设密码还开着0.0.0.0那Redis的保护机制会拒绝除本机外的一切连接这其实是在保护你而不是找麻烦。第三Windows防火墙默认会拦截外部对6379端口的入站连接。你需要手动放行或者添加一条入站规则。用管理员PowerShell执行New-NetFirewallRule -DisplayName Redis 6379 -Direction Inbound -LocalPort 6379 -Protocol TCP -Action Allow这三步缺一不可。我遇到过不少人说我都改了bind防火墙关了还是连不上多半是第二步密码没设或者设了但格式不对也可能第三步防火墙策略没刷新生效。按顺序逐项排查不要一上来就把防火墙整个关掉那是拿安全换方便非常不划算。4.3 修改配置后如何不重启就生效如果只是改密码或者调一些不在CONFIG SET允许列表里的参数通常需要重启服务。但像requirepass、maxmemory这类参数其实可以用在线命令直接改不用重启redis-cli -a YourOldPassword CONFIG SET requirepass YourNewPassword注意在线改完密码后当前连接不会被断开但后续新连接必须用新密码。这个机制带来的副作用是如果你忘记在配置文件里同步修改那么下次服务重启又会回到配置文件里的旧密码导致新密码突然失效。我的习惯是线上改完后马上同步修改配置文件两边保持一致避免密码漂移。在线改配置的命令也可以用来做临时调整而不落盘比如临时调大maxmemory应对峰值流量等高峰期过了再用CONFIG SET调回去。这种热调是Redis运维里非常常用的手法理解它对你后面做缓存治理也会大有帮助。5. 客户端连接与可视化排查工具5.1 redis-cli的常用检查命令redis-cli是Redis自带的命令行客户端也是我平时诊断问题的第一工具。装好Redis并用它连上之后下面这几条命令几乎每次都会用到redis-cli -a YourPassword ping redis-cli -a YourPassword info memory redis-cli -a YourPassword dbsize redis-cli -a YourPassword keys * --no-rawinfo memory可以看内存的分配情况重点看used_memory和used_memory_human判断内存是不是快爆了。dbsize返回当前库的key数量用于评估缓存规模。keys *列出所有key注意生产环境不要随便用这个命令因为是O(N)操作key一多会卡住整个Redis本地开发倒是问题不大。如果你忘了密码或者密码设置后连接报错redis-cli返回的错误信息本身就是很好的线索。NOAUTH说明要认证但没带对密码ERR invalid password说明密码本身错了Connection refused则是服务没起或者端口不对。这套错误口诀记住遇到问题先对号入座比瞎猜高效得多。5.2 Redis Desktop Manager连接不上怎么办命令行固然好用但可视化工具在查看数据结构和做临时调试时效率确实高。我用得最多的是Redis Desktop Manager简称RDM它也正好在热搜词里。这个工具免费版就够日常使用新版本还支持暗色主题和树状展示对于看不惯命令行输出的同学很友好。新建连接时要填几个关键项Host如果Redis在本地填127.0.0.1Port默认6379Password如果设置了requirepass必填没设就留空Database默认0一般不用改RDM连不上时我常见到两种情况。一是填了密码但格式不对比如密码里包含特殊字符工具没做转义二是防火墙拦截了图形化程序的连接。排查方法还是那三板斧先用redis-cli验证本机能不能连通再用RDM验证同样参数能不能连。如果redis-cli能连而RDM连不上大概率是RDM侧配置问题比如SSL/TLS开关被误开了或者代理设置干扰了本地回环。如果两个都连不上那就是Redis服务本身的问题回到配置文件和防火墙去排查。别在GUI里反复点连接按钮没有任何意义把命令行验证通了再来。5.3 验证几种核心数据类型连上Redis之后最好当场验证一下五种基本数据类型能不能正常读写这能确认当前安装版本功能完整。先用字符串类型开胃redis-cli -a YourPassword SET site:name example redis-cli -a YourPassword GET site:name返回example就说明字符串类型没问题。然后是哈希类型redis-cli -a YourPassword HSET user:1001 name Alice age 30 redis-cli -a YourPassword HGETALL user:1001HGETALL会列出这个哈希的所有字段和值。列表类型redis-cli -a YourPassword RPUSH task:queue job1 job2 job3 redis-cli -a YourPassword LRANGE task:queue 0 -1LRANGE能取出整个列表假如你用Redis做消息队列或者任务队列这一组命令就是最常用的。集合和有序集合就不逐个试了思路一样。做完这一轮Redis的安装和基本功能验证基本就画上句号了。6. 常见问题速查与踩坑记录6.1 服务启动后立刻停止的排查思路在我的实操经验里最常见的故障是Redis服务在服务管理器里启动后状态立刻变回已停止有时候还会弹出Windows无法启动Redis服务的错误。这个现象背后的原因通常有三个第一是配置文件语法错误。redis.windows-service.conf里某一行写错了比如requirepass后面没有空格、port写成了非数字、或者用记事本编辑后把文件保存成了带BOM的UTF-8格式Redis去解析时直接出错退出。这种问题怎么定位Windows事件查看器里会有Redis服务的日志记录查看Windows日志 - 应用程序找到来源为Redis的事件里面通常会写明配置文件哪一行解析失败。第二是数据目录不可写。Redis在启动时要创建或读取dump.rdb和appendonly.aof文件如果当前用户对这些目录没有写权限服务会启动失败。解决方法是以管理员身份重新安装服务或者给Redis目录添加Everyone的读写权限。注意以管理员权限安装服务后服务进程本身以SYSTEM或本地服务身份运行目录权限问题出现的概率就会大大降低。第三是端口被占用。前面提到过用netstat -ano | findstr 6379来检查如果发现端口已经被占用要么杀掉占用进程要么改Redis端口。同一台机器上多个Redis实例时也要保证端口各不相同。6.2 端口被占用的正确处理方式端口冲突在处理多实例部署时特别常见。比如你已经跑了一个Redis占用6379还想再起一个用6379那新服务必然起不来。我的做法是让不同实例使用不同端口并且在配置文件和服务名上明确体现区分port 6380redis-server.exe --service-install redis.windows-service.conf --service-name Redis6380这样一台Windows机器就能同时跑多个Redis实例而不互相干扰。如果你只是为了解决端口占用也可以直接改默认端口到6380或其他高位端口。Redis的端口约定俗成是6379但自用完全可以根据业务需求偏离默认值只要客户端连接时对应改动即可。如果必须用6379而它被其他程序占用了那就要先查是什么程序在占用netstat -ano | findstr 6379最后一列是进程PID再用tasklist查一下这个PID对应的进程tasklist | findstr PID确认不是重要系统进程后才能用taskkill /PID PID /F结束它。这里要提醒一下不要随便杀进程尤其System、svchost.exe这类极大概率是别的服务依赖端口杀错了会把系统的某个功能搞坏。6.3 密码设置后连不上的几种情况密码设了之后连不上大部分情况不是Redis没起而是认证环节出了岔子。我总结了三类典型表现第一类是连接报NOAUTH Authentication required。这说明Redis愿意接受连接但你的客户端请求里没带密码。解决方法是客户端配置里加密码或者redis-cli加-a参数。第二类是报ERR invalid password。这个提示很直白就是密码本身不对。注意大小写、特殊字符有时候是手滑多打了一个空格。我在PowerShell里用-a传密码时如果密码里有$、这类符号因为幂等符或环境变量展开导致密码被二次处理也会出现明明密码是对的但就是连不上的诡异情况。这时候换成交互模式输入或者把密码放到单引号里就能绕开转义问题。第三类是配置文件和服务运行实例不一致。你改了redis.windows.conf但服务实际加载的是redis.windows-service.conf或者反过来。这个坑非常隐蔽因为看起来改了配置但没生效。判断当前实例到底加载了哪个配置文件连上后执行redis-cli -a YourPassword CONFIG GET dir redis-cli -a YourPassword CONFIG GET save再看服务属性里可执行文件的路径参数就能确认加载的是不是同一个文件。6.4 数据持久化与意外崩溃的恢复技巧Windows服务模式下的Redis如果配置了appendonly yes数据会持续写入appendonly.aof文件。这个文件很有价值但也可能因为突然断电、强制杀进程等原因损坏。损坏后Redis启动时会报错提示Bad file format reading the append only file这时候千万别慌也千万别把文件直接删了。修复方式是让Redis自己处理受损日志。在配置里加入一行aof-load-truncated yes这个参数的含义是当AOF文件尾部存在不完整写入时自动截断损坏部分并继续启动。代价是最后几条数据可能会丢失但好过整个实例起不来。如果你对数据完整性要求极高就要回到备份策略上去比如定期用SAVE或BGSAVE生成RDB快照文件。RDB和AOF可以同时开启Redis重启时会优先用AOF恢复数据因为AOF记录更完整。我在本机上遇到过两次Windows强制更新导致Redis服务被中止的情况AOF文件都出现了程度不同的损坏靠aof-load-truncated都顺利恢复了。所以这个参数建议提前加上别等出了事故再临时改配置那会儿服务可能已经起不来了。6.5 关于性能与缓存场景的几句心里话把Redis装好只是第一步真正体现价值的还是它被用起来之后。我见过不少项目Redis装好了但用的时候只当它是一个能放字符串的Map压根没发挥出数据类型和原子操作的优势。其实像热搜词里的Redis做中间件Redis分布式锁Redis缓存治理这些场景本质都是围绕Redis的几个核心特性展开的单线程模型带来的原子性、丰富的数据结构、以及内存访问的低延迟。举个例子分布式锁最常见的实现就是基于SETNX命令加过期时间这在Windows版Redis上同样可用行为跟Linux版一致。缓存治理里常用的EXPIRE、TTL、惰性删除与主动删除机制也都完整支持。所以我强烈建议装好Redis后不只是ping一下、存取几个字符串就收工把常用的数据结构都自己动手过一遍想清楚每种结构适合什么业务场景。这样你后续不管是做session存储、排行榜、消息队列还是分布式锁都有一层扎实的底子而不是每次遇到问题都临时去百度命令。我自己在Windows上已经用Redis工作了好几年从早期的5.0到现在的7.x一路走来经历过各种服务崩溃、端口冲突、数据恢复问题最终形成了一个习惯每装一个新的中间件先把配置文件的每个关键参数搞清楚再手动跑一轮基础验证最后把常用运维命令抄在一个笔记里。这套流程放在Redis、MySQL、RabbitMQ上都通用能帮你省下大量的排障时间。希望这篇文章也能让你在Windows上把Redis一步装到位后续直接进入业务开发的快车道。
返回列表