拓冰建站拓冰建站
首页 / 资讯中心 / 正文

Windows下Redis安装全攻略:版本选择、配置与避坑指南

写Redis在Windows上的安装本来是个老生常谈的话题但这些年问的人从来没少过。原因很简单Redis官方其实不维护Windows版本大家平常用到的所谓Windows版Redis都是第三方维护的。这就导致了很多坑——版本老、功能缺失、配置路径不统一、装完连不上、服务起不来换个机器又得从头折腾。我这次就把自己在Windows上装Redis的完整过程、踩过的坑、以及几个方案的取舍逻辑一次讲清楚。整个过程我按实际动手的顺序来写先解决“到底该下载哪一个”再讲“装完之后怎么配置”最后把特别容易翻车的地方单独列一节。跟着走基本不会再走弯路。1. 先交代清楚版本问题为什么Windows装Redis有这么多讲究1.1 官方不维护Windows版Redis究竟是谁在发布很多人第一次搜“Redis Windows下载”会直接进到Redis官网结果发现页面上只有Linux和macOS的安装方式压根不给Windows安装包。这不是你操作的问题而是Redis官方从很早之前就不再发布Windows原生版本了。官方推荐在Windows上使用Redis的方式是借助WSL或者Docker。那大家在Windows上随手搜到的redis安装包是哪来的主要是两类来源一是微软曾经维护过的一个分支MicrosoftArchive/redis基本停留在3.x和5.x时代现在已不更新二是社区开发者维护的版本比如tporadowski/redis它把新版Redis移植到了Windows目前到5.0.14左右还有treesoft的redis以及某些公司或开发者针对内部需要重新编译的更高版本。这就带来一个很尴尬的现实你在Windows上装Redis实际上装的是一个“非官方移植版”。它实现的东西和Linux上的Redis在绝大多数用法上没有区别但在一些高级特性上可能落后尤其在集群模式、部分脚本模块的支持上Windows版本会更保守。1.2 四种常见安装方案的横向对比在正式下载之前我建议你先花两分钟确认自己该用哪种方案。不同方案适合不同场景没有绝对的好坏只有合不合适。方案安装难度适用场景主要缺点MSI安装包低本地开发、快速搭建版本依赖第三方服务管理不够灵活ZIP解压版低大多数开发环境需要手动注册服务或手动启动WSL运行Linux版中贴近生产环境、学习完整功能需要启用WSL占用资源较高Docker容器中高项目级开发、快速切换版本依赖Docker Desktop内存占用大如果你的目标是“赶紧装一个Redis做缓存本地联调个接口”直接选MSI或者ZIP解压版就够了。如果你想在Windows上学习Redis的完整特性尤其是为了之后部署到Linux做准备用WSL更贴近线上。如果公司项目本来就依赖Docker环境那顺手用Docker把Redis跑起来也是好选择还能通过不同镜像标签随意切换Redis版本。我在生产环境长期用的是Linux上的Redis 7.x但在Windows本机开发时最常用的反而是ZIP解压版加注册服务的形式因为它不依赖额外的虚拟化环境启动快调试方便也能让我快速修改配置后重启验证。1.3 如何确认自己下载的Redis版本是否可用下载Redis的Windows版本时我一般会先看两件事一看编译来源是否明确二看版本号是否能满足需求。以常见的tporadowski发布版本为例GitHub的Release页面会写明版本号、对应Redis上游版本、以及支持的操作系统范围。下载的时候优先选 release 版本不要下Pre-release。如果你发现下载的zip里没有redis-server.exe、redis-cli.exe这类的核心可执行文件那大概率下错了。另外一个判断标准是看安装包里有没有redis.windows.conf或者redis.conf这类配置文件。很多第三方包会把配置文件名改成redis.windows.conf这是为了区分Linux版本。这不是问题记住你自己用的配置文件叫什么路径在哪即可。2. 安装前的准备端口、目录、环境要求2.1 环境检查清单不管选哪种方式装装之前先把下面这几项过一遍能少踩至少一半的坑操作系统版本Windows 10、Windows Server 2016以上都可以正常跑RedisWindows 7部分高版本Redis跑不了因为依赖了较新的Visual C运行库。磁盘和内存Redis非常轻安装包也就几十MB但如果你打算配置AOF持久化日志会持续增长要给数据盘留足空间。端口占用Redis默认端口是6379安装前最好先确认本机没有被占用。命令行执行netstat -ano | findstr 6379如果有输出说明该端口已被占用需要用其他端口或关掉占用进程。VC运行库低版本的Windows需要安装Microsoft Visual C Redistributable缺少运行库的症状就是双击redis-server.exe闪退。2.2 目录规划建议我见过很多人在安装时直接用默认路径比如C:\Program Files\Redis开发环境下用默认路径问题不大但有几个不方便的地方。比如配置文件和可执行文件混在一起路径带空格导致某些脚本在解析路径的时候出错还要么是权限不足导致保存RDB快照时写不进去。所以我在Windows上安装Redis时习惯单独建一个目录来放比如D:\software\redis\目录结构就像这样redis-server.exe服务端主程序redis-cli.exe命令行客户端redis.windows.conf配置文件data\存放持久化文件dump.rdb / appendonly.aoflogs\存放日志文件如果开启了日志选项这种规划最大的好处是后续升级Redis时直接把新版本的程序文件替换过来、复用原来的配置和数据目录即可不会因为路径混乱影响数据备份和迁移。3. 两种最常用的Windows安装方式手把手走一遍3.1 MSI安装包方式适合省心党如果你实在不想手动敲命令行直接用MSI安装包也可以。第三方发布的安装包一般会把Redis安装成Windows服务启动方式、开机自启都由Windows统一管理。安装过程很简单一路Next就行但有两个选项需要留意安装时勾选“添加Redis目录到PATH环境变量”这样之后可以在任意控制台窗口直接使用redis-cli命令。如果安装程序询问是否注册服务默认建议勾选后续无需手动启动开机自启动也很稳。MSI安装完成后可以按Win R输入services.msc打开服务管理器找到Redis对应的服务右键启动。服务启动后用命令行执行redis-cli ping返回PONG就说明安装成功。3.2 ZIP解压版方式最灵活可控个人更推荐ZIP解压版因为这种方案不依赖安装程序帮你做的那些“黑盒”操作。解压之后你可以清楚看到所有程序文件配置也完全由自己掌控。第一步在合适的位置解压。假设你解压后的目录是D:\software\redis\。第二步直接在解压目录下打开控制台启动服务redis-server.exe redis.windows.conf注意redis.windows.conf是配置文件。如果你在解压目录直接双击redis-server.exe不带配置文件参数的话服务会以默认配置启动默认配置不代表你改过的配置所以任何配置修改都不会生效。看到Redis的启动Banner和一行Ready to accept connections字样就表示已经成功运行了。此时打开另一个控制台窗口执行redis-cli ping会返回PONG。3.3 把Redis注册成Windows服务解决后台运行问题ZIP解压版的程序在控制台窗口运行问题是只要你一关窗口Redis进程就跟着退出。开发的时候还能忍但如果你希望Redis在后台一直跑就要把它注册成Windows服务。Redis自带的工具里并没有图形化的服务注册界面但提供了命令行注册方式。打开管理员权限的控制台进入Redis解压目录执行redis-server.exe --service-install redis.windows.conf --service-name RedisService --loglevel verbose参数说明--service-install表示安装服务--service-name为服务自定义名称默认是Redis后面跟的配置文件路径就是服务启动时读取的配置注册成功后执行redis-server.exe --service-start --service-name RedisService服务就启动了。想停止服务执行redis-server.exe --service-stop --service-name RedisService想彻底卸载服务先停止服务然后执行redis-server.exe --service-uninstall --service-name RedisService这里有一个比较容易踩的坑注册服务的时候配置文件里如果有相对路径比如日志路径写的是./log/redis.log服务启动时的工作目录和解压目录可能不一致导致日志文件不知道该写到哪去。更稳妥的做法是注册服务前把配置里的路径统一改成绝对路径或者把日志、持久化路径都改成明确的目录例如D:/software/redis/logs/redis.log。3.4 用redis-cli做安装后的连通性验证服务启动之后建议做一套很简单的冒烟测试打开控制台执行redis-cli ping看是否返回PONG。执行redis-cli set hello world看是否返回OK。执行redis-cli get hello看是否返回world。执行redis-cli info看能否输出一大段Redis运行状态信息。这套操作的意义在于ping能证明网络通set/get能证明写入正常info能证明你对Redis实例有基本的可见性。如果这三步都过了你的Redis安装基本就稳了。3.5 基于Docker的方案预留一个参考如果你的项目里本来就用了Docker Desktop那在Windows上跑Redis其实还有一个更省事的办法直接用镜像启动容器。docker run -d --name redis-dev -p 6379:6379 redis:7.0这样起的Redis是Linux官方镜像功能和Linux上完全一致不会遇到Windows移植版的那些功能限制。后续如果要配置密码和持久化可以改成挂载配置文件的方式docker run -d --name redis-dev -p 6379:6379 -v D:/software/redis/conf/redis.conf:/etc/redis/redis.conf -v D:/software/redis/data:/data redis:7.0 redis-server /etc/redis/redis.conf不过Docker方案也有自己的问题Docker Desktop本身挺吃内存尤其在公司电脑上本来资源就紧张一开Docker风扇就狂转。所以我个人只在需要模拟生产环境、或者临时测试不同Redis版本差异的时候用Docker平时本地开发还是直接用Windows原生版。4. redis.conf核心配置项装完必须调的几个参数4.1 端口、绑定地址和守护进程不管用哪种方式装装好之后第一件事应该是打开配置文件看一眼因为默认配置在Windows上通常不等于最优配置。先说端口默认6379正常情况下不用改。但如果你电脑上装了多个Redis实例或者6379被其他程序占用了就需要改成其他端口比如6380port 6380再说绑定地址。默认配置里如果写了bind 127.0.0.1那说明只允许本机访问。这个配置在生产环境是正确的因为Redis默认没有密码暴露到局域网甚至公网是一件很危险的事。但如果你的开发环境是Windows本机运行Redis别的电脑比如同一局域网的同事需要连过来联调那就要改成bind 0.0.0.0或者注释掉bind那一行。注意改成0.0.0.0之后必须立刻设置密码否则就是在给整个局域网里的“有心人”大开方便之门。4.2 设置密码最简单也最容易被忽略默认情况下Redis是完全没有密码的。很多开发环境是在内网大家普遍觉得无所谓但内网里的扫描脚本也不少一旦端口暴露Redis很容易被攻击者利用写计划任务或者植入挖矿程序。设置密码的配置项在配置文件里是requirepass yourpassword改完之后重启Redis服务再用redis-cli连接时会发现直接执行命令会报NOAUTH Authentication required。此时需要先验证密码redis-cli -a yourpassword或者连接后执行auth yourpassword。我个人的习惯是开发环境无论如何都要设置密码哪怕只是简单密码目的不是防强敌而是防误操作和防被扫描器盯上。公司项目里有几个测试环境Redis裸奔一天之内就会被扫描器写入奇怪的key这事真不是危言耸听。4.3 持久化配置RDB和AOF怎么选Redis默认开启了RDB快照持久化在配置文件里有这么一段save 900 1 save 300 10 save 60 10000意思是在900秒内如果有1个key发生变化就保存一次快照在300秒内有10个key变化就保存一次在60秒内有10000个key变化就保存一次。这种策略在绝大多数场景下够用。它的缺点是可能会丢失最近一段时间的数据但从另一个角度看它对性能影响很小而且恢复速度快。如果你的业务不能接受数据丢失就可以开启AOF追加日志。配置文件里默认是关闭的打开方式如下appendonly yes appendfsync everysecappendfsync有三个可选值always每条命令都写入磁盘最安全但性能最差everysec每秒写入一次折中方案最多丢一秒数据no不主动同步完全交给操作系统性能好但可能丢较多数据大多数情况下选everysec就够了。RDB和AOF是可以同时开启的AOF文件体积会持续增长必要时可以设置auto-aof-rewrite-percentage 100和auto-aof-rewrite-min-size 64mb让Redis自动重写AOF文件避免无限膨胀。4.4 内存上限与淘汰策略别让Redis吃光机器内存Redis是纯内存数据库默认情况下它可以用到操作系统允许的所有内存。如果你在配置里不设置内存上限某次缓存写入量激增时可能导致整台机器内存告急甚至连操作系统都开始卡顿。建议在配置文件里设置一个合理的内存上限例如maxmemory 512mb同时指定内存达到上限时的淘汰策略maxmemory-policy allkeys-lru常见的淘汰策略有这么几种noeviction不淘汰直接返回错误allkeys-lru从所有key中按最近最少使用淘汰volatile-lru只从设置了过期时间的key中按最近最少使用淘汰allkeys-random从所有key中随机淘汰volatile-ttl从设置了过期时间的key中按过期时间先后淘汰先淘汰快过期的开发环境设allkeys-lru是最省心的选择。生产环境建议根据业务形态选如果要严格保证所有数据都可查那就不开淘汰策略而是设置更长的过期时间或定期清理。4.5 配置日志和持久化目录建议把Redis的日志和数据目录单独指定不要让它们散落在安装目录的各个角落。Windows下在配置文件里可以这样写logfile D:/software/redis/logs/redis.log dir D:/software/redis/data注意Windows下路径分隔符建议用正斜杠/避免被转义解析出错。如果没有写logfileRedis日志会直接输出到控制台注册了Windows服务后日志就极难看到到时候出了问题连报错原因都找不到。5. 可视化客户端与开发环境连接Redis5.1 Redis Desktop Manager和它的替代品命令行用久了其实也能接受但查看key、搜索key、看过期时间这些操作在命令行里确实不够直观。所以绝大多数人还是会装一个可视化客户端。Redis官方之前没有官方图形客户端。历史最久、用户最多的第三方客户端是Redis Desktop Manager简称RDM。这个软件早期是免费的后来变成了商业授权模式下载安装时会提示购买专业版许可证也可能下载页面跳转比较麻烦很多国内开发者在下载阶段就卡住了。另外一个很好用的替代品叫Another Redis Desktop Manager简称ARDM它开源、免费、跨平台界面和功能完全对标RDM甚至在部分交互上更顺手。我最近几年在Windows上基本都用ARDM连接配置、key查看、命令行面板、JSON格式化这些功能都很完整日常排查问题完全够用。无论用哪种工具新建连接时需要填的字段都是这几项名称自己起一个方便区分多个连接地址本机就是127.0.0.1远程机器填对应IP端口默认6379密码如果配置了requirepass就填没配则留空连接上之后如果列表是空的别忘了检查一下你连的数据库索引是不是正确的。Redis默认有16个库索引从0到15连接时默认进的是db0如果数据写到了db1切换一下数据库索引就能看到了。5.2 Spring Boot项目里连接Redis的常规配置开发Java项目时最常见的就是在Spring Boot中操作Redis。spring-boot-starter-data-redis里的配置只要基础路径写对大多数连接问题都出在密码或数据库索引上。一个比较标准的application.yml配置片段长这样spring: data: redis: host: 127.0.0.1 port: 6379 password: yourpassword database: 0 timeout: 5000ms lettuce: pool: max-active: 8 max-idle: 8 min-idle: 0注意Spring Boot 2.x和3.x在配置前缀上有一点差异Spring Boot 2.x使用spring.redis.*Spring Boot 3.x使用spring.data.redis.*。如果你在升级Spring Boot版本后突然连不上Redis先检查配置前缀是不是没跟着改过来。还有一种偷懒又有效的排查方法先在命令行用redis-cli -a 密码 ping确认Redis本身是通的再报Java连接异常那问题一定出在Java进程和Redis之间的连通性或者配置上而不是Redis本身的问题。5.3 RedisTemplate的increment()报错Not an integer or out of range这是一个Java开发里很经典的问题。热词里也提到了RedisTemplate的increment()报错“不是integer或out of range”。平时用Spring Boot操作自增操作时很多人会这么写redisTemplate.opsForValue().increment(user:view:1001, 1);然后日志里报错ERR value is not an integer or out of range这个报错的意思很直白Redis里已经存在的这个key它的值不是整数类型或者数字已经超出了整数范围。最常见的原因是这个key之前是用set方法写入的字符串或者你写入的时候用了不同的序列化器例如JDK序列化把Java对象序列化成了一段二进制再用increment()操作时Redis识别不了它。我踩过一回之后总结出三条排查路径先用可视化客户端或redis-cli查看这个key的当前值确认它是不是一个正常的整数字符串。确认RedisTemplate的序列化方式是否统一。通常会把StringRedisTemplate和RedisTemplate分开用用String序列化器存普通字符串用JDK或JSON序列化器存对象。如果是高并发场景下两个业务共享了同一个key另一个业务写入的是非数字类型就会产生这个异常。这种情况需要从业务层面把key隔离。6. 高频故障排查与经验笔记6.1 redis-server闪退怎么办闪退是Windows版Redis最典型的问题之一。肉眼看到的表现是双击redis-server.exe窗口一闪而过根本来不及看报错信息。常规解决方法是打开控制台在命令行里手动执行redis-server.exe redis.windows.conf这样窗口不会自动关闭报错信息会停留在控制台里。常见的报错原因有三个配置文件中有不支持的参数比如某些Linux版Redis特有的选项被写进Windows版配置端口被占用报错Could not create server TCP listening socket *:6379: bind: No error缺少VC运行库如果是配置文件中有不认识的参数导致的检查配置里是不是有一些非常新的配置项Windows移植版解析不了。逐行确认并注释有问题的配置再重新启动即可。6.2 能ping通Redis但业务连接超时或慢这种情况多见于跨机器访问。比如你把Redis装在Windows服务器上其他机器上的服务来连接虽然网络能通但连接耗时很高或者经常连接超时。优先检查两件事一是Windows防火墙是否放行了6379端口二是Redis的bind配置是否为0.0.0.0或者注释掉了绑定的IP。Windows防火墙放行端口时需要同时放行TCP入站规则。如果嫌图形界面操作麻烦可以用管理员权限执行netsh advfirewall firewall add rule nameRedis Port dirin actionallow protocolTCP localport6379这个命令执行完会看到“确定”字样再去尝试远程连接。另外提一句redis-cli连接本机正常但远程超时和公司内网WIFI隔离策略也有关系。有的办公网络开启了AP隔离同一局域网里的设备之间不能互相通信。在这种环境下怎么调防火墙都没有用需要联系网络管理员放开限制或者搭建一个内网代理。6.3 修改配置不生效好多人改完redis.windows.conf后怀着期待的心情重启Redis结果发现配置毫无变化。问题的根源通常不是重启而是启动时根本没有用到这个配置文件。双击redis-server.exe启动时默认使用的是编译时内置的默认配置不会自动去读同目录下的配置文件。只有显式指定配置文件改动才会生效。如果用命令行启动就需要写成redis-server.exe D:/software/redis/redis.windows.conf如果注册的是Windows服务注册时指定的配置路径就必须和实际配置文件路径一致否则服务启动后使用的也是默认配置。6.4 注册服务成功但启动失败注册服务时看到InstallService success并不代表服务一定能跑起来。如果启动服务时报错比如提示服务无法启动或者服务启动后又自动停止了最常见的原因是配置文件中存在Redis无法解析的内容。这时候先不要反复点“启动服务”打开事件查看器在Windows日志的应用分类里找Redis服务相关的报错记录。事件日志里通常会直接写明具体是哪一项配置导致的启动失败比瞎猜效率高得多。另外有一个Windows下特有的问题Redis配置文件所在路径如果包含中文字符或者特殊字符某些情况下会导致服务加载失败。解决办法是先把Redis整个目录移到纯英文路径下例如D:\software\redis再重新注册服务。6.5 数据持久化失败重启后数据丢失我曾经在Windows上遇到过一次重启后Redis数据全丢的情况。排查之后发现Redis的dir配置指向了一个相对路径而服务运行时的当前目录和配置的当前目录不一致导致RDB快照根本没写到数据文件里。解决办法很简单把dir和dbfilename都改成绝对路径dbfilename dump.rdb dir D:/software/redis/data改完配置后重启服务写入一些测试数据再执行redis-cli save触发一次持久化然后去数据目录里确认dump.rdb文件是否存在。这个步骤虽然只有一分钟但能直接判断持久化是否正常。6.6 安全和加固层面的一些提醒在Windows上装Redis哪怕只是开发环境我也强烈建议做三件事第一必须设置requirepass。这是最低限度的安全要求。 第二不要暴露到公网。如果一定要让外部访问至少绑定内网IP而不是0.0.0.0如果网络环境复杂最好是配一个跳板机做端口转发。 第三不要用root或者Administrator这种高权限账号跑Redis服务。Windows下给Redis服务单独建一个本地账号是最稳妥的做法即使Redis被入侵攻击者拿到的也只是低权限。这三件事不需要花多少时间但能避免很多后续的“半夜救火”场景。7. 聊点个人的使用心得这几次在Windows上折腾下来我自己最常用的组合是ZIP解压版加手动注册服务配合ARDM做日常查看。相比MSI安装包的省心这种方式让我对Redis目录下的每一个文件、每一个配置项都心里有数。维护Windows版Redis这件事有个心法不要试图拿它和Linux生产环境做完全一致的复刻。它就是开发调试的工具核心价值是让你快速把代码跑起来。真要往高并发、集群方向走迟早要换到Linux或者容器环境。如果你平时只是做本地开发到这一步已经够用了。如果你接下来想研究主从复制、哨兵或者集群我建议后面可以在Windows上开三个不同端口的Redis实例用replicaof配置把它们组成一个简单的主从结构再用redis-cli验证数据同步。这套实验在Windows完全能做通而且是你理解Redis复制机制的一个很好切入点。
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门