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

资讯详情

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

Windows下Redis安装全攻略:原生包、Docker与WSL2对比及避坑指南

Windows下Redis安装全攻略:原生包、Docker与WSL2对比及避坑指南 搞 Windows 开发的人几乎都绕不开一个尴尬项目在 Linux 服务器上跑得好好的 Redis本地 Windows 环境却总是要折腾半天。要么下载页面看不懂要么装完启动报错要么重启电脑服务就丢了。网上搜“Redis 下载与安装 教程 windows版”能出来一堆文章但大多要么太老要么照着做根本跑不起来。这篇我就把 Windows 下装 Redis 的路径完整捋一遍从最省事的原生 zip 包到 Docker 和 WSL 的对比再到可视化客户端和常见坑位直接给你能抄作业的版本。先说结论Windows 上跑 Redis 的姿势不止一种没有绝对的最好只有最适合你当前场景的最合适。如果你只是本地开发调试装个原生 Windows 版最省心如果你要和团队保持完全一致的 Redis 版本和环境Docker 是更优解如果你想最大程度模拟生产环境WSL 里的 Linux 版 Redis 最接近线上行为。1. 先搞清楚Windows 上跑 Redis你到底该选哪条路很多人在第一步就卡住了因为“安装 Redis”这件事在 Windows 上并不是一个标准动作。官方 Redis 项目其实并不原生支持 Windows这背后有历史原因Redis 大量使用了 fork()、epoll 等 Linux 特有的系统调用Windows 的进程模型和 IO 模型跟 Linux 差异很大直接移植的成本极高。所以你在官网看到的是源码包和 Linux 安装方式Windows 用户需要用社区维护的移植版或者其他间接方案。1.1 常被推荐的四种安装方式对比我把目前 Windows 上可行的方案做一个横向对比你可以对着这个表先确定自己的方向。方案安装难度环境一致性性能表现维护成本适用场景原生 Windows 移植版tporadowski/redis低一般5.0.x 较旧中低本地开发调试、临时测试MemuraiWindows 原生 Redis 兼容低较好跟踪新版中高中社区版有限制需要较新版本、不想折腾 Docker 的 Windows 环境Docker Desktop Redis 容器中完全一致中有虚拟化开销中团队协作、需要精确复现服务器版本WSL2 里装 Linux 版 Redis中完全一致高中最接近生产环境、需要 Redis 高级特性这个表里我最常用的是第一和第三种。Docker 方案在团队项目里特别香因为你可以在 docker-compose 里锁定镜像版本团队所有人拉下来就是一模一样的环境不会再出现“我本地好的呀怎么你那就报错”的经典扯皮。1.2 原生移植版的历史遗留问题很多人不知道Redis 官方曾经维护过 Windows 版本但停留在 3.x 时代就放弃维护了。现在社区最常用的原生版是 tporadowski/redis基于 Redis 5.0.14 构建虽然版本不算新但胜在稳定、开箱即用而且是 Visual Studio 直接编译的二进制在 Windows 上跑起来几乎无感。这个版本对 Redis 5.0 的核心功能支持完整像持久化、主从复制、哨兵、集群这些都有但注意它不支持 Redis 6.0 之后的新特性比如 ACL 权限控制、多线程 IO 等。还有件事你得清楚Redis 官方从 6.0 开始就不提供 Windows 官方版本了所以任何跟你说“官网下载 Windows 安装包”的教程都是扯淡。网上还有一些第三方编译的 6.x、7.x Windows 版本质量参差不齐有的甚至捆绑了不明动态链接库我劝你别随便下小心踩到恶意软件的坑。我的经验是要么用 tporadowski 的 5.0.14 原生版要么直接上 Docker 跑官方镜像。2. 原生安装下载、解压到注册服务一条龙这是最简单也最直接的方式适合绝大多数本地开发场景。我详细拆解每一步包括那些教程里不说的细节。2.1 下载 Redis for Windows 安装包去 GitHub 上搜 tporadowski/redis 这个仓库在 releases 页面下载 Redis-x64-5.0.14.1.zip 这个压缩包具体版本号以仓库最新 release 为准。下载完成后解压到一个没有中文和空格路径的目录比如D:\dev\redis或者C:\redis。这一步看着简单但路径问题我见得多了——有人解压到C:\Users\张三\Desktop\Redis后面配置服务时各种奇葩报错就是因为 Windows 服务对路径中的中文字符支持不友好。所以别嫌我啰嗦路径一定要用纯英文最好也不要有空格。解压后你会看到这些文件redis-server.exe服务端、redis-cli.exe命令行客户端、redis.windows-service.conf服务配置文件、redis.windows.conf普通配置文件、redis-benchmark.exe性能测试工具等。打开终端进入解压目录先试一下直接启动cd D:\dev\redis redis-server.exe --port 6379看到 Redis logo 和Running in standalone mode这样的输出就是成功了。CtrlC 能停掉服务。这种前台启动方式适合验证安装是否正确但窗口一关服务就没了不适合长期用。2.2 注册成 Windows 服务开机自启的关键如果你想让它像 MySQL 一样开机自动运行就得把 Redis 注册为 Windows 服务。这一步用我们刚解压目录里的redis-server.exe配合--service-install参数完成。需要特别注意得用管理员权限打开命令行否则注册服务时会报权限不足。用管理员身份打开 PowerShell 或 CMD执行# 进入 Redis 解压目录 cd D:\dev\redis # 安装服务指定服务名、配置文件并设置自动启动 redis-server.exe --service-install redis.windows-service.conf --service-name Redis --service-auto-start yes我解释一下这几个参数的含义--service-install表示安装服务redis.windows-service.conf是服务模式专用的配置文件注意不是redis.windows.conf这两个文件里有些配置项对服务模式有不同的处理逻辑--service-name Redis给服务起个名字以后启动、停止、删除都用这个名--service-auto-start yes设置开机自动启动。安装成功会提示[SC] CreateService 成功然后执行redis-server.exe --service-start --service-name Redis看到Redis service successfully started就说明服务已经跑起来了。验证一下打开服务管理器WinR 输入 services.msc找到 Redis 服务状态应该是“正在运行”启动类型是“自动”。顺便说一下注册完服务之后你就不用去管redis-server.exe那个前台进程了它已经被系统接管。日常操作都用命令来管理# 停止服务 redis-server.exe --service-stop --service-name Redis # 删除服务先停止再删除 redis-server.exe --service-stop --service-name Redis redis-server.exe --service-uninstall --service-name Redis这套命令我写过无数次闭着眼都能敲。要注意的是删除服务前必须先停止服务不然会提示服务还在运行中。2.3 配置文件里最值得动的几个参数Redis 默认配置能用但生产一些基本调整还是有必要的。打开redis.windows-service.conf我个人习惯优先看这几个配置项# 默认只监听本机 6379 端口如果你是本地开发保持这个就行 bind 127.0.0.1 # 保护模式建议保持 yes protected-mode yes # 端口 port 6379 # 持久化默认是 RDB如果怕丢数据可以开启 AOF # RDB 快照到 dump.rdb save 900 1 save 300 10 save 60 10000 # AOF 持久化 appendonly no appendfilename appendonly.aof appendfsync everysec # 数据文件目录默认是当前目录建议改成固定目录 dir ./我强烈建议你把dir改成一个固定的绝对路径比如D:\dev\redis\data因为默认的./是相对路径如果你从不同的目录启动服务生成的 dump.rdb 文件会散落在各处后面想找数据文件会发现根本不知道在哪。另外appendfsync everysec的意思是每秒刷一次磁盘这是性能和数据安全之间比较折中的选择如果你对数据丢失完全不能接受可以改成always但性能会打折如果你只是缓存用途、丢了无所谓改成no性能最好。改完配置后记得重启服务才生效redis-server.exe --service-stop --service-name Redis redis-server.exe --service-start --service-name Redis3. 更现代的方案Docker 里跑 Redis 主从和可视化原生版本最大的问题就是版本停滞在 5.0如果你需要 Redis 6/7 的新特性或者项目里用到了 Redis Cluster、ACL 这些原生版就顶不住了。这时候 Docker 是最好的选择。3.1 Windows 上装 Docker Desktop 的流程和坑Docker Desktop 现在对 Windows 的适配已经很成熟了但要注意它要求系统是 Windows 10 64 位专业版/企业版/教育版或者 Windows 11并且开启了 Hyper-V 虚拟机平台。装之前检查一下自己的系统版本家庭版会比较麻烦但也不是不能装——通过启用“适用于 Linux 的 Windows 子系统”功能也就是 WSL2家庭版也能跑 Docker Desktop。安装步骤就是下载 Docker Desktop Installer.exe双击安装安装过程中选择使用 WSL 2 而不是 Hyper-V如果系统支持的话。安装完重启启动 Docker Desktop等右下角的小鲸鱼图标变成绿色就说明正常运行了。这里有个常见的坑Docker Desktop 启动后显示卡在 “Docker Engine starting”多半是 WSL2 内核没更新或者 BIOS 里的虚拟化没开。解决办法是去微软官网下载最新的 WSL2 内核更新包装完重启。你要是对这块不熟直接在命令行跑一下wsl --update wsl --status看到“默认版本2”就说明 WSL2 就绪了。3.2 用 docker-compose 部署 Redis顺便把主从一起搞定Docker 的好处是镜像版本任意挑团队完全一致。我推荐用 docker-compose 来管理因为光docker run一条命令记参数就记到脑壳疼写在 yml 文件里一劳永逸。新建一个docker-compose.yml内容如下version: 3.8 services: redis-master: image: redis:7.0-alpine container_name: redis-master ports: - 6379:6379 command: [redis-server, --appendonly, yes, --requirepass, 你的密码] volumes: - redis-master-data:/data networks: - redis-net redis-slave: image: redis:7.0-alpine container_name: redis-slave depends_on: - redis-master ports: - 6380:6379 command: [redis-server, --slaveof, redis-master, 6379, --requirepass, 你的密码, --masterauth, 你的密码] volumes: - redis-slave-data:/data networks: - redis-net volumes: redis-master-data: redis-slave-data: networks: redis-net: driver: bridge然后在 yml 文件所在目录执行docker-compose up -d这条命令会把主库和从库一次性拉起来。主库对外端口是 6379从库是 6380从库自动从主库同步数据。--appendonly yes开启 AOF 持久化--requirepass和--masterauth分别配置了客户端访问密码和主从复制密码这两个要一致不然从库连主库会认证失败。这个 docker-compose 文件很适合做测试比如你想验证 Redis 主从故障转移的流程先docker stop redis-master再观察从库的状态变化完事之后docker-compose up -d一把拉起来干净利落。3.3 Docker 装 Redis 时容易忽略的几个细节第一件事容器里没有配置文件的情况下redis-server启动的是默认配置持久化到/data目录你需要用-v挂载宿主机上的目录不然容器删了数据也跟着没了。上面 compose 文件里已经挂载了命名卷数据不会丢。第二件事端口一定要显式映射。容器内部的 Redis 默认监听 6379但对外映射到什么端口完全由你定比如6380:6379表示宿主机 6380 端口转发到容器 6379。如果只写6379而不指定映射端口Docker 会随机分配一个宿主机端口后面客户端连接都不知道该连哪个很坑。第三件事配置密码后所有客户端连接都需要带密码。在命令行验证docker exec -it redis-master redis-cli -a 你的密码如果不想在命令行里暴露密码可以不加-a进入交互模式后先AUTH 你的密码再操作。3.4 为什么不建议在 Windows 上装 Linux 版再编译 Redis还有一种思路是装个 WSL2 发行版然后在里面直接apt install redis-server或者编译源码。这个思路本身没问题WSL2 里跑的 Redis 性能比 Docker 更接近裸机因为 Docker Desktop 底层也是 WSL2。但对大多数人来说多了一层 Linux 操作成本文件路径、服务管理都跟 Windows 习惯不一样。我自己的经验是如果你已经熟练使用 Linux那 WSL2 是很好的选择如果你主要工作在 Windows 生态用 Docker 反而更省心因为 Docker Desktop 有图形界面启动、停止、看日志都比较直观。4. 可视化客户端别再只会敲 redis-cli 了装好服务端一个趁手的可视化客户端能让你排查数据、看 key 的状态事半功倍。虽然redis-cli用熟练了很高效但可视化工具在浏览 key、查看过期时间、编辑 hash/zset 这类场景下明显更直观。这一节聊聊 Windows 上目前主流的几个可视化工具。4.1 Redis Desktop ManagerRDM的下载与配置Redis Desktop Manager 是老牌工具曾经的收费软件现在有社区版可以免费用功能基本够用。网上搜索“redis desktop manager下载”能找到官方渠道我个人建议直接去 GitHub 对应仓库的 releases 页面下载避免从不知名下载站拿到被篡改的安装包。安装完成后打开软件点击 “Connect to Redis Server” 新建连接填这几项Name连接名称比如local-redis随便起方便识别就行Host127.0.0.1Port6379Password如果有密码就填没有就留空点击 Test Connection 看是否能连通能通就直接保存连接。连接成功后左侧会显示库名db0双击可以展开看到所有 key右边能看到 key 的 type、ttl 和 value双击 value 可以直接编辑。RDM 有个很实用的功能是 Command Console底部有个 tab 可以直接敲 Redis 命令相当于内置了一个 redis-cli适合随时验证命令效果不用再开个终端。4.2 Another Redis Desktop Manager新一代开源选择如果说 RDM 是 Windows 上的老前辈那 Another Redis Desktop Manager 就是近几年社区里很火的新贵GitHub 上 star 数很高完全开源免费跨平台支持 Windows / Linux / Mac。界面更现代支持暗色主题而且在处理超大 key 和慢查询日志展示上做得比 RDM 体验好。它的下载地址在 GitHub 搜索qishibo/AnotherRedisDesktopManagerReleases 页面里有 Windows 安装包。安装后新建连接配置项和 RDM 差不多但有几个不一样的地方值得注意支持 SSH 隧道连接如果 Redis 跑在远程 Linux 服务器上可以直接通过 SSH 方式连不用额外配置防火墙放行 6379 端口支持哨兵模式连接填哨兵地址它会自动发现主库支持 Cluster 模式集群环境下能自动识别节点分布这个工具我目前的主力就是它尤其打开大 key 的时候比 RDM 流畅不少。RDM 社区版在打开几十 MB 的 value 时偶尔会卡一下Another Redis Desktop Manager 基本无感。4.3 命令行自测安装是否成功的最终验证不管装的是原生版还是 Docker 版也不管你多么依赖可视化工具命令行自测这一步永远值得做一遍因为这是最底层、最可靠的连通性验证方式。在你安装 Redis 的目录下或者容器里执行redis-cli -h 127.0.0.1 -p 6379 ping如果返回PONG说明服务端正常响应。再来几个常用命令# 设置一个字符串 key redis-cli set user:name tom # 获取这个 key redis-cli get user:name # 查看所有的 key redis-cli keys * # 查看 key 的过期时间-1 表示永不过期 redis-cli ttl user:name # 查看服务信息和统计 redis-cli info其中info命令输出的信息特别多比如redis_version看版本、connected_clients看连接数、used_memory_human看内存占用、total_commands_processed看累计处理命令数。我建议你至少把info memory和info replication这两块的输出看一遍前者告诉你 Redis 吃了多少内存后者告诉你当前节点是主还是从、有没有其他从节点连上来。5. Windows 上安装 Redis 的排雷手册从下载到跑通你可能遇到各种报错。这一节我把 Windows 平台最常踩的几个坑全部列出来并给出排查思路。这些东西都不难但第一次遇到确实能卡你半天。5.1 端口被占用的排查链路启动 Redis 时报错Could not create server TCP listening socket *:6379: bind: No error或者直接闪退极大可能是 6379 端口被别的进程占了。排查的顺序我一般是# 查看 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 换个端口了。如果你确认这个进程就是之前启动的 redis-server 实例直接结束它再重启服务就行taskkill /F /PID 12345如果你需要让 Redis 使用别的端口改配置文件里的port参数然后重启服务。注意 6379 是 Redis 约定俗成的默认端口改掉之后所有客户端连接都要跟着改能不动尽量不动。5.2 服务启动后秒退的常见原因注册完服务一查发现状态是“已停止”这时候别急着反复启动先看日志。Windows 上 Redis 服务模式会往 Windows 事件查看器里写日志查看路径是事件查看器 → Windows 日志 → 应用程序筛选来源为 Redis。不过说实话这个日志信息量不大更快的办法是直接前台启动一次看报错redis-server.exe redis.windows-service.conf前台启动会把错误打到控制台。我遇到过最常见的几个错配置文件里的dir路径不存在导致 RDB 快照写不进去报Cant chdir to之类的错。解决办法是先建好目录或者改用已存在的路径。权限不足尤其是dir指向了C:\Program Files这种受保护目录普通用户权限下 Redis 没有写文件的能力导致启动失败。解决办法是换一个用户可写的目录。端口被占用这个上面说过了。配置文件格式错误比如requirepass后面的密码忘了写或者配置文件不是 UTF-8 编码。Windows 记事本保存配置容易带 BOM 头Redis 读取时会把 BOM 当配置项的一部分直接解析报错。解决办法是用 VS Code 或 Notepad 改配置保存时选 UTF-8 无 BOM。5.3 本机能连、局域网别人连不上的问题如果你的 Redis 不仅自己要用还想让同事或者局域网内其他机器连光启动服务是不够的。有两个地方必须改第一个是配置文件里的bind 127.0.0.1这表示只允许本机连接你得改掉或者注释掉这行让 Redis 监听所有网卡第二个是protected-mode yes必须改成no不然即使监听了所有地址Redis 的自我保护机制也会拒绝非本机的连接只会在日志里给你一个警告。注意这两个配置同时改才有用只改其中一个都不行。改完重启然后在其他机器上试redis-cli -h 你的局域网IP -p 6379 ping能返回PONG就说明通了。不过我得提醒一句把 Redis 暴露到非本机环境等于是把数据裸奔给局域网里所有人看如果你没有设置密码的话谁都能连上来flushall清空数据。所以只要准备让别的主机连接就一定要开启requirepass设置一个强度够的密码。5.4 Windows 下 Redis 内存和持久化的注意点Windows 原生版的 Redis 在内存使用上跟 Linux 官方版有一些差异最大的体感是内存碎片率和整体性能不如 Linux 上表现好。我这里有一个实践层面的建议如果你只是开发环境用这个差异基本无感如果跑的是性能测试或者预发环境我强烈建议你转 Docker 或者 WSL2数据才更有参考价值。持久化上Windows 版对 RDB 和 AOF 的基本功能都支持但如果你用的是 5.0 的 tporadowski 版AOF 文件超过几 GB 后重写时偶尔会遇到性能下降的问题我自己碰到过一次当时是直接把 AOF 关了靠 RDB 快照来解决。RDB 的save 900 1意思是 900 秒内至少一次写操作就触发快照对开发环境来说够用了万一进程崩了最多丢十几分钟的数据可接受。5.5 密码策略和连接超时的调优开发环境上密码不是必须的但一旦服务不止你一个人用我还是建议加上。在redis.windows-service.conf里设置requirepass 你的强密码设置之后重启服务redis-cli 连接就需要认证了redis-cli # 进入后先执行 AUTH 你的强密码如果前面忘了密码连上后执行任何命令都会报NOAUTH Authentication required别慌输入AUTH加密码就行。RDM 和 Another Redis Desktop Manager 里都有 Password 配置项填上就能自动认证。连接超时这块timeout 0表示连接空闲多久断开默认 0 是不断开。如果出现一堆“僵尸连接”占用连接数可以把它设置成 300秒意思是 5 分钟没有操作的连接自动关闭。但要注意如果你用了 Redis 的 Pub/Sub 订阅功能连接是长时间挂着的这时候设timeout会把订阅连接也断开一定要确认业务场景后再调。6. 验证安装成果用一个小 Demo 串起整个链路安装配置做完光ping通还不够我习惯跑一个小 Demo 把整个链路验证一遍确保不仅是服务端装好了客户端操作、持久化、重连都没问题。这个demo很简单就是模拟一个用户登录计数的场景。用redis-cli或者你喜欢的可视化客户端执行以下操作# 设置一个用户登录次数的计数器初始为 0 redis-cli set login:count 0 # 每次登录加 1 redis-cli incr login:count # 查看当前登录次数 redis-cli get login:count # 设置一个 60 秒后过期的临时验证码 redis-cli set sms:code:user1 123456 EX 60 # 查看过期时间应该是 50~60 之间的数 redis-cli ttl sms:code:user1如果每一步都能正确返回结果说明你的安装完整可用。incr是 Redis 里非常常用的原子自增命令分布式场景下的计数器、限流器很多都基于它实现这也是你在面试题里经常看到的点。然后验证持久化等服务运行了几分钟确保 RDB 快照周期到了重启 Redis 服务再用redis-cli get login:count查看如果数据还在说明 RDB 持久化正常工作。如果数据没了很大可能是dir路径不对RDB 文件写到了别处你找一下dump.rdb文件在哪个目录下然后调整配置里的dir。如果是 Docker 环境重启容器的方式会多一步先去 Docker Desktop 停掉容器再启动观察数据是否保留。因为 Docker 里挂载了数据卷重启容器后数据应该还在。这套验证做完你的 Windows 上 Redis 就算真正跑起来了。后面不管你是要集成到 Spring Boot 项目里还是写 Python/Node.js 脚本调用连接信息无非就是 host、port、password 这三样区别只是不同语言的客户端库 API 而已。我自己在本地开发机上一直保持着原生 Windows 版 Docker 两套并存的状态D 盘放了一个 5.0.14 原生版作为默认本地服务日常调试直接连遇到需要对齐线上版本的集群场景时就起一个 docker-compose 的 Redis 集群用完就关不污染宿主机。这个组合到目前为止还没有遇到过解决不了的问题。你照着上面的步骤把环境搭起来之后踩坑概率会比我当初小很多。
返回列表