尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Windows下安装Redis的四种方式与配置排查指南

Windows下安装Redis的四种方式与配置排查指南 在Linux上装Redis一句apt install redis-server就完事连配置文件都不用动。到了Windows就完全是另一番景象你去Redis官网的Download页翻一遍Linux、macOS、Docker的安装说明都列得清清楚楚唯独没有Windows安装包。我当年第一次找的时候还以为是官网藏得太深反复确认后才明白Redis官方压根不提供Windows版本。所以Windows用户装Redis本质上是在“官方不支持”的前提下从社区方案里挑一条最顺手的路。这篇文章把我自己用过、也帮同事远程装过的几条路都写清楚zip解压版怎么跑起来、MSI安装包怎么变成Windows服务、WSL2和Docker又是怎么用的再加上装完之后一定要动的密码、持久化、端口占用排查以及我踩过的几个真实坑。适合刚接触Redis、又不想为了一个缓存服务去装Linux的Windows开发者也适合正在纠结“到底用哪种方式装”的同学。1. 先理清楚官网没有Windows版所以装Redis得选条路1.1 Redis官方对Windows的态度Redis官方FAQ里写得很坦白官方不支持Windows平台。早期的Redis 2.x时代微软还维护过一个Windows移植分支后来那个仓库也基本进入归档状态社区的活跃维护版本停留在一个相对早期的功能集上。所以你在官网下载页面看到的都是Linux源码包、macOS安装包、Docker镜像这些Windows用户想在电脑上跑一个原版Redis只能找第三方编译的版本。这个背景直接决定了安装方式的选择逻辑不是“哪个最好”而是“哪个最不折腾”。1.2 四条主路对比我实际用下来Windows下跑Redis主要就四条路各有各的适用场景。安装方式上手难度适合场景备注zip解压版低本地开发、临时调试需要手动启动或注册服务MSI安装包最低本地开发、公司Windows服务器安装后自动注册Windows服务WSL2里安装中追求和Linux生产环境一致需要启用WSL2适合熟悉Linux命令的人Docker Desktop中本地多容器环境、想顺手学Docker依赖Docker Desktop占用资源较多1.3 我的选型倾向日常本地开发我最推荐zip解压版。原因很简单解压就能用不往系统里写入乱七八糟的东西想换版本直接换目录。MSI适合懒得看命令行的同事装完就是一个系统服务开机自启对用户最友好。但如果你的项目最后要部署到Linux服务器我建议直接上WSL2或Docker因为Windows移植版在行为上会和Linux原版有一些细小差异尤其是文件路径处理、shutdown时的持久化行为早点和生产环境保持一致能少踩很多隐蔽的坑。2. zip解压版最稳的本地开发方案从下载到跑通2.1 下载时注意仓库选择Windows移植版没有统一官网最稳妥的做法是去GitHub找社区仓库。目前比较常见的两个选择tporadowski/redis基于Redis 5.x移植的老牌仓库很多人的Windows Redis初体验都是从这来的release文件名为Redis-x64-5.x.x.zip和.msi格式。redis-windows/redis-windows维护更活跃提供基于新版本7.x/8.x的编译包想要ACL、多线程IO这些新特性就选它。下载时注意三点一是系统位数选64位二是路径里不要带中文和空格三是不推荐去各种软件站下载所谓的“绿色版”。我见过太多软件站版本被植入广告脚本或者捆绑安装换一个正常渠道并不难。2.2 解压、启动、验证三连假设下载的是Redis-x64-5.0.14.zip解压到C:\tools\redis目录里大概有这些家伙redis-server.exe 服务端主程序 redis-cli.exe 命令行客户端 redis-benchmark.exe 压测工具 redis.windows.conf 默认配置文件打开PowerShell不需要管理员权限进入目录后启动服务端cd C:\tools\redis .\redis-server.exe .\redis.windows.conf看到类似The server is now ready to accept connections的日志就说明起来了默认监听6379端口。此时这个终端窗口会被服务占用另外开一个PowerShell窗口执行.\redis-cli.exe ping返回PONG整个安装就算跑通了。2.3 把Redis注册成Windows服务上面那种方式有个缺点关掉终端窗口Redis就停了。日常开发一般不希望每次都手动开窗口那就把它注册成Windows服务。以管理员身份打开PowerShell执行cd C:\tools\redis .\redis-server.exe --service-install .\redis.windows.conf --service-name Redis .\redis-server.exe --service-start --service-name Redis--service-install负责创建服务--service-start负责启动它。之后打开任务管理器切到“服务”标签能看到名为Redis的服务正在运行。注册成功后就算不开任何终端Redis也一直在后台跑着开机自动启动省心很多。卸载服务用这两条命令.\redis-server.exe --service-stop --service-name Redis .\redis-server.exe --service-uninstall --service-name Redis2.4 换端口和设密码默认配置意味着任何人只要知道你的IP和端口就能往Redis里写数据这在开发机上问题不大但在公司内网环境下就有点危险。我一般装上后第一件事就是改配置文件里的两处。打开redis.windows.conf找到# port 6379想换端口就把注释去掉改成其他端口比如port 6380。设密码则是在文件里找# requirepass foobared改成requirepass MyStrongPass123保存后重启服务.\redis-server.exe --service-stop --service-name Redis .\redis-server.exe --service-start --service-name Redis再连的时候就要带密码了.\redis-cli.exe -a MyStrongPass123 pingRedis-cli会提示密码暴露在命令行里的风险可以加--no-auth-warning参数去掉那条警告。实际开发中我更推荐把密码写到客户端配置里而不是每次命令行硬输入。3. MSI安装包一条命令都不用敲装完就是Windows服务3.1 安装过程里的关键选项同样去GitHub对应仓库的release页面下载.msi文件双击就开始装了。MSI安装界面本身没什么难度但我建议留神两个选项Add Redis to PATH勾选后可以在任意目录直接敲redis-cli不用每次cd到安装目录。Create Redis service简单理解就是安装完自动注册成Windows服务以后开机自动运行。这两个默认推荐都勾上。安装路径一般默认在C:\Program Files\Redis如果不想装在系统盘可以改成D:\Redis之类的但路径里不要有空格和中文避免一些脚本拼接路径时出问题。安装完成后打开services.msc可以看到Redis服务已经出现在列表里状态是正在运行。验证一下redis-cli ping能返回PONG就通了。3.2 和zip版的服务管理差异MSI版和zip版注册成的服务本质上没有区别唯一的差异在配置文件上。MSI安装的Redis服务读取的不是redis.windows.conf而是redis.windows-service.conf。这个文件同样在安装目录下作用和面向命令行启动的配置文件相互独立。所以如果你改了redis.windows.conf里的密码但用的是Windows服务方式启动你会发现密码根本没生效。正确做法是改redis.windows-service.conf然后重启服务Restart-Service Redis这个混淆点踩的人太多了单独拎出来提醒一下。3.3 MSI和zip到底怎么选我自己在帮别人装的时候会给一个简单的判断标准如果你平时不常碰命令行或者这台机器是公司分配的、过段时间可能交接给别人用MSI因为服务管理和卸载都标准如果你在意环境整洁、喜欢随时切换Redis版本、或者后面想在同一台机器上起多个不同配置的Redis实例用zip因为一个目录一个实例互不干扰。多实例场景在本地联调时很常见一个6379给项目A用一个6380给项目B用zip版复制一份目录改下配置就行MSI反而麻烦。4. 配置与服务管理密码、持久化、端口占用排查一套带走4.1 配置文件核心项速览不管用哪种方式装最终都要面对redis.windows.conf这个文件。我建议装完先花十分钟过一遍这四项对Redis的日常使用有直接帮助配置项默认值作用我的建议port6379监听端口默认即可同机多实例再改bind127.0.0.1允许连接的IP本地开发保持默认requirepass空访问密码内网环境建议设置appendonlyno是否开启AOF持久化开发环境也建议改成yesWindows版配置文件的注释特别多用编辑器打开后搜索关键词就能定位别傻乎乎往下翻页找。4.2 端口被占用怎么查启动Redis时如果报bind: Address already in use或者redis-server一闪而过八成是6379端口被占了。排查流程我固定用三步# 第一步看谁占用了端口 netstat -ano | findstr 6379输出会有一条TCP 0.0.0.0:6379 0.0.0.0:0 LISTENING 12345最后一列的12345就是进程PID。# 第二步看这个PID是什么进程 tasklist | findstr 12345确认是无关进程后强制结束它# 第三步结束进程重新启动Redis taskkill /F /PID 12345开发机上经常是这个端口被虚拟机软件、其他中间件占用查出来之后能杀就杀。不想杀进程就改Redis的端口用port配置项错开。4.3 RDB和AOF两种持久化一定要搞明白Redis数据默认放在内存里进程一结束数据就丢了。Windows上开发时很多人遇到“重启后Redis缓存全没了”的问题就是没配置持久化。持久化有两种方式RDB快照按照save策略周期性地把内存数据写到磁盘的dump.rdb。默认开着策略是三组条件900秒内有1次写入、300秒内有10次写入、60秒内有10000次写入满足任一条件就落一次盘。缺点是两次落盘之间的数据变更在断电时会丢。AOF追加日志把每次写命令追加到日志文件里重启时重放日志恢复数据。默认关闭推荐开发环境打开appendonly yes appendfilename appendonly.aof appendfsync everysecappendfsync everysec表示每秒刷一次磁盘这是性能和安全的平衡点。两个都开着也没问题Redis重启时会优先用AOF恢复数据因为AOF记录的变更更完整。4.4 日常运维命令速查装好Redis不是终点联调时最常用的几条命令我整理一下# 查看服务端信息 redis-cli info # 查看所有key数量 redis-cli dbsize # 查看当前所有连接 redis-cli client list # 查看慢查询日志 redis-cli slowlog get # 生产环境慎用清空当前库所有数据 redis-cli flushdb # 慎用中的慎用清空所有库 redis-cli flushallflushall这个命令我在Windows下就误触发过一次当时本想清一个测试库结果把同机另一个项目的缓存全推平了。建议在任何实例上都设置requirepass至少能拦住手滑或者误操作。5. 想要真实生产体验WSL2和Docker里跑Redis5.1 WSL2里用一套Linux原生Redis如果你的项目最后要部署到云服务器我强烈建议本地开发直接用WSL2因为这样你操作的Redis就是Linux原版Windows移植版在某些边界行为上的差异完全不存在。启用WSL2后在管理员PowerShell里执行wsl --install -d Ubuntu装完重启进入Ubuntu终端安装Redissudo apt update sudo apt install redis-server -y sudo service redis-server start redis-cli ping注意Ubuntu仓库里的Redis版本可能不是最新的但足够日常开发用。WSL2的localhost转发特性允许Windows侧的redis-cli直接访问WSL2里监听的6379端口所以你在Windows上写代码连接地址照常填127.0.0.1:6379就行。5.2 Docker Desktop跑Redis容器Docker方式适合已经装了Docker Desktop的开发者或者需要同时编排Redis、PostgreSQL、Nginx等多个服务的项目。热词里“docker安装redis主从”“windows安装docker”这两个高频搜索说明这条路确实不少人在走。安装Docker Desktop后跑一个Redis实例docker pull redis docker run -d --name redis-local -p 6379:6379 redis验证docker exec -it redis-local redis-cli ping想带上自定义配置把配置文件挂载进容器docker run -d --name redis-local -p 6379:6379 -v C:\Users\你的用户名\redis.conf:/usr/local/etc/redis/redis.conf redis redis-server /usr/local/etc/redis/redis.confWindows路径映射到容器时反斜杠盘符写法在部分终端里会有转义问题建议用双反斜杠或者D:/path的形式。要模拟主从、哨兵架构用docker-compose编排最方便这个以后可以单独写一篇细说。5.3 三种模式什么时候选哪种简单总结成一句决策逻辑只想本地调试、不想折腾选zip或MSI想跟Linux生产环境对齐选WSL2想顺手学习容器编排、或者本地本来就跑着一堆容器选Docker Desktop。从踩坑概率来看WSL2和Docker的方式在“环境一致性”上省的心远大于初期配置多花的时间。Windows移植版偶尔会遇到redis-server对某些配置参数的处理和Linux版不一样那种问题排查起来反而最浪费时间。6. 踩坑实录闪退、连接失败、数据丢失我挨个排查过6.1 双击redis-server.exe闪退新手最常见的操作是双击redis-server.exe结果窗口弹出来一秒就消失。千万不要双击用终端运行才能看到报错日志。常见原因有三种端口被占用报bind: Address already in use用第4.2节的方法排掉。配置文件语法写错了比如requirepass后面多打了空格、选项名拼写错误启动日志会明确提示哪一行有问题。系统缺少VC运行库Windows移植版依赖较新的Visual C Redistributable去微软官网装一个最新的就行。排查的时候先执行最简单的启动方式用最干净的参数跑起来再逐步恢复配置.\redis-server.exe --port 6379如果这样能启动说明问题就在配置文件里二分法缩范围排查。6.2 注册服务成功但启动失败--service-install执行成功但--service-start报服务启动失败或者services.msc里手动启动立即弹错误。这种情况九成是Path问题服务注册时会记录当时用的配置文件路径如果你注册后把Redis目录移动了或者配置文件路径中带中文、空格服务启动时读取不了配置就直接退出。解决办法是卸载服务回到正确的目录重新注册注册命令里一定写全配置文件路径.\redis-server.exe --service-uninstall --service-name Redis .\redis-server.exe --service-install C:\tools\redis\redis.windows.conf --service-name Redis6.3 redis-cli连接时报NOAUTH或DENIED连上Redis但是所有操作都返回NOAUTH Authentication required不用怀疑就是设了密码没带。用-a带上密码或者先在客户端里执行auth 密码。还有一种情况局域网其他机器连你的Redis时提示DENIED Redis is running in protected mode。这是因为Redis保护模式默认开启只允许本机回环地址访问。如果确实需要局域网内其他机器访问要把配置改成protected-mode no bind 0.0.0.0但请务必同时设置requirepass不然等于把Redis裸奔在局域网里被扫描到之后就是被批量写垃圾数据。6.4 重启后数据全没了这个问题专门坑过Windows新手。Redis默认配置下如果你没有启动时加载到dump.rdb或者AOF没开服务重启后内存里所有数据都会清空。而且Windows上如果非正常断电RDB快照还没来得及落盘丢失的数据范围可能比预想更大。我的习惯是开发环境的Redis也把appendonly yes打开AOF日志文件虽然会慢慢变大但日常开发那点写入量根本不成问题。数据安全这块Redis官方默认的RDB策略确实偏保守自己动一下配置比事后恢复数据便宜太多。7. 装完只是开始Windows下Redis的常用配套与实战方向7.1 可视化客户端怎么选命令行redis-cli虽说万能但看key列表、查过期时间、浏览大key图形界面效率还是高很多。Windows下我用过两个Redis Desktop ManagerRDM老牌工具界面以表格展示连接管理清晰近年新版免费版功能有些缩减但查看基础数据足够。Another Redis Desktop Manager开源免费跨平台启动速度快对大数据量的渲染做得更好我目前在用这个。两个都支持Redis Cluster、SSH隧道日常开发完全够用。没必要去买收费版免费版的功能已经覆盖了95%的场景。7.2 五大数据类型先混个脸熟装好Redis之后下一步肯定是往里面放数据。Redis有五种基本数据类型Windows下用redis-cli测试很简单类型典型命令使用场景举例Stringset / get / incr缓存用户信息、计数器Hashhset / hget / hgetall存储一个对象的多个字段Listlpush / rpop / lrange简单消息队列、最新列表Setsadd / smembers / sismember去重、关注列表交集ZSetzadd / zrange / zrevrange排行榜、延时队列初学的时候不用急着背命令先理解一个道理Redis的每一个数据类型都有对应的现实问题比如ZSet天然适合排行榜List天然适合做先进先出的队列。Windows下装好之后先在redis-cli里每个类型都敲一遍很快就能建立直觉。7.3 Windows环境能玩出什么花我能想到的和实际接触过的方向大概有这三个。缓存Windows开发机上缓存数据库查询结果、接口响应配过期时间这是最基础也最常用的玩法。缓存治理的核心是key命名要有统一前缀比如user:info:1001别裸写一堆无规律字符串。分布式锁多实例抢锁用set key value NX EXRedis官方推荐的简单锁实现用Windows本地Redis模拟多进程抢锁完全可行学完这个再去理解Redisson那些封装就轻松很多。消息队列中间件Redis Stream类型提供了生产消费模型Windows本地开发时跑一个轻量消息订阅流程不需要启动重量级MQ服务轻量很多。最后说一点我的个人体会。Windows下装Redis这件事本身不难难的是很多人装完就以为结束了回到项目里连接一报错又开始毫无头绪地瞎试。把这篇文章里提到的启动验证、配置文件修改、服务注册、端口排查这几步自己走一遍以后再遇到Redis连接问题你至少能快速定位是服务没起、密码错了、端口被占还是配置没生效。如果后面你自然过渡到WSL2或Docker里跑Redis那Windows下的这套经验也不会白费因为核心的知识是通用的。
返回列表