
1. Windows装Redis先搞清楚官方版和移植版的区别1.1 为什么Redis官网没有Windows安装包你们第一次去Redis官网redis.io找下载链接的时候大概率会在Downloads页面看半天发现只有Linux、macOS的安装方式压根找不到Windows的安装包。这不是你眼神不好而是Redis官方从一开始就没有正式提供过Windows版本。Redis的设计目标是高性能内存数据库底层依赖Linux的epoll事件驱动模型、fork()系统调用这些特性。Windows的IOCP模型和进程模型跟这差距很大官方团队为了保证性能和稳定性选择不往Windows这个方向投入。官方文档里也明确说过Windows版本不是官方支持的只是出于开发测试的目的由微软和社区做了移植。所以你在Windows上装Redis用的其实是社区移植版不是官方原版。这个身份差异很重要因为它直接影响你的版本选择、配置路径和后续维护方式。我见过不少人拿着Linux版的配置习惯直接套到Windows上结果各种诡异问题。1.2 Windows版Redis到底有哪几个来源目前在Windows上能跑的Redis主要就三个来源微软的Redis官方归档版本。微软在GitHub上有个仓库叫MicrosoftArchive/redis里面放了3.x和4.x时代的Windows移植版。这个仓库已经进入归档状态不再维护版本非常老只适合老项目兼容新项目不建议碰。tporadowski维护的Redis 5.0.14。这是口碑最好的一个移植版原作者基于Redis 5.0.14改了支持Windows的代码直接编译成exe。它也是目前国内各种教程里最常见的一个版本稳定性很高支持RedisTemplate、Jedis这些主流客户端都没问题我自己在Windows上跑了几年的也是这个版本。redis-windows团队维护的更新版本。近几年有一个叫redis-windows的GitHub组织在维护7.x版本的Windows移植目前可以找到Redis 7.0和7.2的Windows版本。如果你需要新特性比如Redis Function、AOF多部分文件这些可以考虑这个版本。但它毕竟是社区项目跟进了主版本遇到问题的时候可能找不到太多参考。1.3 版本选择建议我的建议很简单如果是学习、本地开发、单机测试优先选5.0.14那个版本理由有三条。第一它是唯一一个被大量文章、教程、视频反复验证过的Windows版本你踩坑时最容易被搜到答案。第二Redis 5.0已经覆盖了绝大多数的核心数据结构、持久化、事务、发布订阅功能日常开发完全够用。第三它用起来就是解压即用不需要装任何依赖连编译工具链都省了。如果你非要追新版本那就用redis-windows的7.x版本记得做好遇到问题自己查源码的心理准备Windows移植版的坑往往比Linux原版多一截。2. 下载解压版Redis并跑通第一次启动2.1 选择下载包走下载这步的时候注意别被网上的各种“一键安装包”给带偏了。Redis的Windows版根本没有安装向导都是zip压缩包解压直接运行。那些做成安装程序的大概率捆绑了别的软件或者干脆就是别人二次打包的没必要冒这个险。去GitHub的Release页面找对应版本下载zip压缩包。5.0.14版本的话去找tporadowski/redis项目的releases文件名一般是Redis-x64-5.0.14.zip大概不到5MB。下载完成后直接解压到你想要放的目录比如D盘的根目录下新建一个redis文件夹解压进去就行。2.2 解压后的目录结构解压完你会看到这些文件redis-server.exe服务端程序核心中的核心redis-cli.exe命令行客户端用来连接和操作Redisredis-benchmark.exe性能测试工具redis-check-aof.exe / redis-check-dump.exeAOF和RDB文件修复工具redis.windows.conf / redis.windows-service.conf配置文件前者给手动启动用后者给注册成服务时用sentinel.conf哨兵配置文件做高可用的时候才会用到这里有个小细节目录路径尽量不要有中文和空格。比如别放到“C:\Program Files\redis”这种路径下万一以后配置文件里写路径或者做脚本空格很容易带来不必要的麻烦。我一般就放在D:\Redis简单清爽。2.3 启动服务端启动方式有两种区别你别搞混了。第一种直接双击redis-server.exe。这时候Redis会按照默认配置运行监听6379端口数据保存到当前目录下。它会在一个命令行窗口里运行窗口一关服务就停了。这种方式适合临时测试跑一下看看能不能通。第二种使用配置文件启动。打开命令行工具先切换到Redis解压目录然后执行redis-server.exe redis.windows.conf加了配置文件之后Redis启动时会把日志打印到控制台。你会看到一行特别关键的输出[xxxxx] Running modestandalone, port6379.看到这句话就说明服务端已经在6379端口上正常跑起来了。注意看启动信息里有没有警告提示比如用了默认密码、配置文件找不到之类的下面会细说。2.4 用redis-cli验证服务端起来之后再开一个新的命令行窗口执行redis-cli.exe如果连接成功窗口会变成这样127.0.0.1:6379然后输入命令验证127.0.0.1:6379 ping PONG能返回PONG说明服务端和客户端都正常工作。再试试写入和读取127.0.0.1:6379 set hello redis OK 127.0.0.1:6379 get hello redis到这一步你已经拥有一个能用的Redis了。但别高兴太早这个窗口开着的时候没问题你把它一关Redis就没了。接下来要解决的就是怎么让它老老实实在后台运行。3. 把Redis注册成Windows服务告别关窗口就死3.1 为什么要注册成服务很多人第一次跑通Redis之后就直接关窗口走人了。等到第二天要用的时候发现连接不上然后开始怀疑是不是Redis坏了折腾半天才发现原来是服务根本没起来。在Windows上规范的用法是把Redis注册成Windows服务。这样做的好处有三个开机自动启动不用手动开、服务在后台运行不依赖命令行窗口、服务崩溃后可以由系统自动重启。你把它想象成给Redis找了个托管的管家它自己会照看好一切。3.2 服务安装的具体命令打开管理员权限的命令行窗口进入Redis目录执行redis-server.exe --service-install redis.windows-service.conf --service-name Redis这里拆开来解释一下参数的含义--service-install告诉Redis我要把它安装成一个Windows服务redis.windows-service.conf指定服务启动时用的配置文件。这个文件是解压目录里自带的里面预置了一些适合后台运行的配置--service-name Redis给服务起一个名字叫Redis。以后操作这个服务都是用这个名字执行完之后命令行会输出[xxxxx] Service successfully installed.如果看到这句话说明服务已经安装成功了。另外还有个细节安装服务这一步命令行窗口必须是以管理员身份打开的不然会提示权限不足。3.3 服务启动和验证服务安装好之后还需要手动启动一次redis-server.exe --service-start --service-name Redis同样会看到类似成功的提示。这时候去Windows服务管理器里看一眼WinR键输入services.msc找到服务名Redis状态应该显示“正在运行”启动类型是“自动”。验证的方式也很简单还是用redis-cliredis-cli.exe -p 6379 ping返回PONG就对了。到这里就算你把所有命令行窗口都关掉Redis也依然在后台运行。重启电脑之后它也会跟着自动起来。3.4 卸载服务哪天你不需要这个Redis了卸载也很干净redis-server.exe --service-uninstall --service-name Redis注意卸载之前最好是先停掉服务redis-server.exe --service-stop --service-name Redis这个先停后卸的顺序能避免一些文件占用的问题。4. 配置文件改造从裸奔变成生产环境能用的服务4.1 配置文件的加载方式Redis启动时默认不加载任何配置文件直接使用内置默认值。默认值的特点是不设密码、监听所有网卡、不需要持久化、日志不打到文件。这些默认值在Linux上测试一下可以但如果你的Redis要被局域网内其他电脑访问那就等于把你的数据裸奔在网络上。所以第一步就要保证服务启动的时候真的加载了配置文件而不是用的默认参数。用服务方式启动时加载的是redis.windows-service.conf这个文件。你随时可以打开这个文件看里面的配置。这里说一个排查技巧如果你发现改了配置文件没有生效去服务管理器里重启一下Redis服务很多新手都是改了配置之后不重启然后坐在那里怀疑人生。4.2 必改项密码、绑定、端口用记事本推荐用VS Code或者Notepad打开redis.windows-service.conf重点改这几个地方。设置密码也就是requirepass。找到这一行# requirepass foobared把前面的注释符号去掉把foobared改成你自己的密码比如requirepass MyStrongPassword123设置之后redis-cli再连接时就要先认证了127.0.0.1:6379 get hello (error) NOAUTH Authentication required. 127.0.0.1:6379 auth MyStrongPassword123 OK 127.0.0.1:6379 get hello redis认证成功的标志就是能正常执行命令了。这一步从测试环境到生产环境的过渡中密码是第一个必须处理的。绑定可访问网卡。找到# bind 127.0.0.1这行的作用是指定Redis监听哪个网络接口。如果保持注释状态Redis会监听所有网卡也就是说局域网内任何设备都能尝试连接你的6379端口。如果你只是本机使用建议改成bind 127.0.0.1这样只有本机能连最安全。如果你确实需要局域网内的其他机器访问可以写成bind 127.0.0.1 192.168.1.100注意后面的IP换成你自己电脑的局域网IP这样本机和那个IP都能访问其他IP还是要被挡在外面。修改端口可选。如果6379被其他程序占用了或者你想让别人猜不到你的Redis端口可以改port 6380改完之后以后连接的时候就要带上新端口号了redis-cli.exe -p 63804.3 持久化和日志Redis默认会把数据存在内存里如果宕机或者重启内存数据就全丢了。所以生产环境一定要开启持久化。Redis的持久化有两种方式RDBRedis DataBase是快照方式每隔一段时间把内存数据全量写到一个dump.rdb文件里。这种方式性能好但可能丢失最后一次快照之后写入的数据。配置文件里默认是开启的你能看到这几行save 900 1 save 300 10 save 60 10000意思是900秒内有至少1个键被改动就保存一次300秒内有至少10个键被改动就保存一次60秒内有至少10000个键被改动就保存一次。AOFAppend Only File是追加方式每次写命令都会被追加到appendonly.aof文件里。这种方式更安全最多丢一秒的数据但文件会越来越大。开启方式appendonly yes我个人的建议是开发和测试阶段两种都可以关掉或者用默认配置数据丢了不心疼。但正式使用比如用一个Windows服务器当公司的缓存服务器必须开启AOF同时保留RDB作为兜底。日志配置也很关键。默认情况下Redis把日志打到标准输出在Windows服务模式下这个输出会被系统吃掉导致出问题时什么都看不到。改成文件日志logfile D:/Redis/redis.log改完之后记得重启服务以后Redis的运行日志就会写到你指定的路径里排查问题的时候直接看这个文件比自己瞎猜靠谱多了。4.4 常规环境下的推荐配置最后给你整理一份我在Windows上日常使用的核心配置直接在服务配置文件里改就行requirepass Redis2024Home bind 127.0.0.1 port 6379 appendonly yes appendfilename appendonly.aof logfile D:/Redis/redis.log maxmemory 256mb maxmemory-policy allkeys-lru最后两行要重点解释一下。maxmemory限制Redis最大使用内存为256MB避免内存被Redis吃光导致系统卡死。这是Windows环境下特别容易被忽视的一点因为在Linux上有容器限制或运维手段Windows上如果不管Redis会一直涨内存直到系统崩溃。maxmemory-policy设置了内存达到上限时的淘汰策略。allkeys-lru表示所有键按照最近最少使用原则淘汰不常用的键这是缓存场景最合适的策略。如果你的Redis用来存不可丢的数据这个策略就不好使了得根据业务来选合适的淘汰方式。5. 可视化客户端连接与基础操作5.1 Redis Desktop ManagerRDM的安装命令行下玩玩还行真要天天看数据、排查过期键、监测内存没有可视化客户端太折磨人了。Redis官方没有提供图形界面但社区里有几个成熟的选择。首推的自然是Redis Desktop Manager也就是RDM。老版本的RDM是免费的后来从1.0版本开始改成了商业授权模式官方安装包里会有试用期。如果你接受付费直接官网下载最简单。不想付费的话还有一个完全开源免费的替代品叫Another Redis Desktop Manager简称ARDM。它的功能跟RDM基本持平界面更现代跨平台支持我最常用的是它。下载之后安装一路Next就行。启动界面比较简单点击New Connection新建连接。5.2 连接配置的关键字段新建连接时需要填这几个字段Name连接名称随便起比如“本地Redis”Host填写127.0.0.1这就是本机的意思PortRedis端口默认6379如果你改了配置文件这里也要跟着改Password你在配置文件里设置的requirepass密码。如果没设密码留空就行Database默认0。Redis有16个逻辑数据库编号从0到15默认用的是0号库全部填完后点Test Connection如果显示Success恭喜连接成功了。如果失败大概率就是下面这篇第6部分里说的几个问题之一。5.3 数据和基本类型的查看连接上之后RDM或者ARDM的左侧会按数据库编号列出键你可以点进去看到键值和过期时间。右侧还能直接执行命令行操作比如输入set foo bar效果跟redis-cli一模一样。如果你以前没用过Redis这里说个基础中的基础。Redis有五种基本数据结构String字符串存最基础的键值比如缓存用户信息List列表有序的字符串集合适合存消息队列、历史记录Set集合无序且唯一的字符串集合适合做去重、点赞数Hash哈希相当于一个对象的多个字段适合存对象数据ZSet有序集合带分数排序的集合适合做排行榜在可视化工具里每种数据类型都会有不同的展示方式你可以很直观地看到某个键是列表还是哈希。这个对于排查问题太有用了。我以前排查一个缓存问题就是靠RDM看到某个键存储的格式不对原来客户端序列化时用的JSON读的时候却当成普通字符串解析。6. 你大概率会遇到的五个坑以及完整排查过程6.1 端口被占用了启动失败刚学会启动Redis的时候我第一次从配置文件启动就遇到了启动失败控制台提示大概意思是端口6379已经被占用了。排查链路是这样的先确认是不是真有程序占了6379端口。在命令行执行netstat -ano | findstr 6379这条命令会列出所有监听6379端口的进程和对应的PID。如果你发现有一行LISTENING记下最后一列的PID然后在任务管理器里找到这个PID对应的进程看到底是谁占用了。实测下来最常见的是电脑上启了另一个Redis实例或者用了Memcached这类同样默认6379端口的服务。解决办法很简单修改配置文件把端口改成6380或者停掉占用端口的程序二选一。6.2 连接超时防火墙和bind配置的锅有一次我在本机用客户端工具连接Redis提示连接超时。Redis服务端明明已经在运行了但外面就是连不进去。排查顺序很重要我习惯从近到远、从简单到复杂排查。第一步先用redis-cli本机连一次如果本机能连说明服务端逻辑没问题。第二步检查配置文件里的bind设置。如果bind只有127.0.0.1那就只有本机能连其他机器当然连不上。你需要改成监听所有网卡或者指定内网IP。第三步检查Windows防火墙。这一步很多人会漏掉。Windows防火墙默认会拦截外部程序访问6379端口。解决办法是防火墙里添加入站规则放行6379端口。设置方法网上有详细的图文教程核心就是在“入站规则”里新建一条允许TCP端口6379的规则。6.3 密码错误客户端连接被拒设置了requirepass之后可视化客户端连接时报错NOAUTH Authentication required或者access denied。这个原因九成九是密码没填对。但问题在于Redis的密码是明文存在配置文件里的如果你设置了特殊字符比如密码里带着#或者空格配置文件解析时可能会出问题。我的建议是密码里只使用字母、数字和下划线这三种字符不要用#这种容易跟注释混淆的字符。如果你已经把特殊字符写进去了最好用双引号把密码包起来比如requirepass RedisHome#2024另外一个容易忽略的细节修改requirepass之后必须重启Redis服务否则改动不会生效。很多人改了配置但不重启然后就一直卡在认证失败这步。6.4 服务自动启动失败服务账户权限问题把Redis注册成服务之后一切正常。但有一次重启电脑后发现Redis服务没有启动处于停止状态。查看系统日志发现服务启动时提示“错误1053服务没有及时响应启动或控制请求”。这个问题在Windows服务里很常见。原因是注册服务的时候账户权限不够或者配置文件路径有问题导致服务启动时读不到配置。我的排查路径先手动启动一次服务看能不能起来。如果手动能起来但系统开机时起不来那就尝试把服务的“登录”账户从“本地系统账户”改为“本机管理员账户”。在服务管理器里右键Redis服务选属性切到“登录”选项卡选择“此账户”填写你的Windows管理员账号密码重启服务。如果是配置文件路径问题确认redis.windows-service.conf里写的路径都是绝对路径而且文件本身还在原来的位置。我踩过这种坑把Redis目录从D盘挪到了E盘但服务安装时记的路径还是D盘的自然起不来。解决办法就是用管理员身份重新执行一遍服务卸载和服务安装命令。6.5 Windows命令行中文乱码Windows的命令行窗口默认编码是GBK而Redis输出的日志用的是UTF-8编码。所以你会发现redis-cli的提示信息经常是各种看不懂的乱码。这个其实是Windows的老毛病网上能搜到一堆乱码大全相关的讨论完全不用慌。最直接的解决办法是调整命令行窗口的代码页。在命令行窗口标题栏上点右键选“默认值”切到“字体”选项卡把字体改成“Lucida Console”或者“新宋体”然后在“属性”里选“选项”选项卡把“使用旧版控制台”关掉。再执行chcp 65001这条命令会把当前命令行窗口的代码页切换为UTF-8之后重新运行redis-cli中文就正常了。注意这个设置只对当前窗口有效新开的窗口需要重新执行chcp 65001或者用批处理脚本把chcp 65001塞进去。7. 最后的经验Windows上跑Redis的正确心态7.1 别把它当生产级服务器我在Windows上跑了很久的Redis总体感受是当本地开发环境、当学习环境、当公司内部小工具的缓存支撑完全没问题。但如果要支撑大流量线上业务还是老老实实放Linux云服务器上这是成熟的选择。Windows版Redis的主线版本跟官方主版本一直有滞后5.0和7.x差距不少很多新特性在Windows上体验不到。而且遇到性能瓶颈的时候Windows移植版往往缺乏足够的优化支持。想深入了解Redis高级用法比如集群、哨兵、持久化调优最终还是得切到Linux环境下学这也是为什么网上有人在问docker安装redis主从、redis集群相关的问题这些高级玩法在Windows上都有天然短板。7.2 我的个人维护习惯如果你打算把Windows上的Redis当作日常开发环境长期用建议养成这几个习惯第一配置文件一定用版本管理每次改配置之前先复制一份原文件。我曾经改错了一个参数导致Redis起不来折腾了半天才想起来备份的配置文件能救急。第二日志文件定期看一眼。日志里如果出现大量WARNING或者ERROR记录说明配置有问题或者有异常访问早点发现能少很多麻烦。第三给本机Redis设一个独立的端口比如6380别跟项目里其他环境的默认6379混在一起。这样可以避免同时开多个项目时端口冲突。我自己的Windows机器上6379是测试环境6380留着给正式联调环境互不干扰。7.3 向Linux迁移的平滑路线最后给一个实用的路线图如果你在Windows上已经把Redis的配置、数据结构、常用命令都摸熟了想迁移到Linux建议先用Docker在Windows上模拟Linux环境来跑Redis实际感受一下Linux下Redis的部署流程。这样迁移的时候你至少熟悉了基本命令和配置项剩下的只是操作系统的差异。在Windows上装Redis这件事真的不难就是下载解压、配置服务、改好配置三个步骤的事。花一个下午走完这一遍后面用起来会顺很多。