
如果你在 Win10 上装过 Redis大概率经历过这样的场景去官网下载页面一看全是 Linux 和 Docker 的安装选项找半天也找不到一个 exe好不容易找到一个第三方 zip 包解压启动却弹出各种错误。这篇文章我把自己在 Win10 下折腾 Redis 的完整过程梳理了一遍——原生 Windows 移植版、WSL2 里跑 Linux 版、Docker 容器方案全都会讲到包括下载、启动、注册服务、改配置、连客户端、排错这些环节。无论你是刚接触 Redis 的初学者还是需要在 Win10 开发机上搭一套缓存环境的开发者照着我下面的步骤走半小时之内就能让 Redis 跑起来。1. 先说结论Win10 装 Redis 到底该选哪种方式1.1 为什么官方没有 Windows 版很多朋友第一次装 Redis 都会卡在第一步找不到 Windows 安装包。这不是你眼神不好而是 Redis 官方确实从来没有发布过 Windows 原生版本。官方文档和支持体系长期以 Linux、macOS 等类 Unix 系统为主生产环境推荐的就是 Linux 裸机或容器部署。那网上流传的 redis.exe 是哪来的基本上是第三方开发者把 Redis 源码移植到 Windows 平台后的编译产物。比较有名的两个tporadowski/redis基于 Redis 5.0.14 的 Windows 移植版目前流传最广自带 redis-server、redis-cli、redis-benchmark注册 Windows 服务的脚本也集成在里面。Memurai商业化的 Redis 兼容实现自称是 Windows 平台上的 Redis 替代品适合企业级场景但个人用的话要看清楚授权方式。另外还有个历史遗留问题微软自己早年维护过一个 Redis 3.x 的 Windows 分支但早就停止维护了。现在你要是搜到那种 3.x 的老安装包尽量不要用版本太老哨兵、Lua 脚本、Stream 这些功能都有缺失踩坑概率极大。1.2 三个方案速览与选择建议在 Win10 上把 Redis 跑起来主流的无非三条路方案版本来源启动方式资源占用推荐场景原生 Windows 移植版社区移植常见 5.0.xexe 直接跑 / 注册服务低最省内存本地开发、学习入门、快速验证WSL2 安装 Linux 版官方 apt 源版本很新linux 命令/service中虚拟机占用内存与生产环境保持一致、练习 Redis 命令Docker 容器官方镜像版本任选Docker Desktop较高依赖 Docker 进程多版本切换、项目隔离、不污染系统我的建议很直接如果你只是想在 Win10 笔记本上本地写代码、调接口用原生移植版就够了双击启动、内存占用低、卸载也干脆如果你是想对比生产环境或者学习 Redis 底层原理用 WSL2 装官方版本最踏实如果你经常要在不同项目之间切换 Redis 版本或者需要复现一些集群、主从的测试环境Docker 是首选。接下来三个方案我会一个一个给你完整跑一遍你先别急着选看完再动手。2. 方案一原生 Windows 移植版适合快速上手2.1 下载移植版版本一定要挑对这个方案推荐用 tporadowski/redis 的 Release 包在 GitHub Releases 页面找redis-x64-5.0.14.1.zip这种文件即可。下载完解压到一个没有空格的路径比如C:\Redis或者D:\dev\redis不要图方便解压到C:\Program Files\Redis这种带空格的目录下Windows 下很多工具对带空格路径处理不好后面配置服务、写脚本都会莫名其妙出问题。为什么推荐 5.0.14.1 而不是官网下面那些看起来更“官方”的 3.x zip 包因为 5.0 之后的性能和稳定性明显好于 3.x而且 tporadowski 这个移植版把 Windows 服务集成做得比较完善压缩包内文件也比较全解压后直接就是一套可用的 Redis 工具集。当然如果说你需要更新的版本社区里也有基于 Redis 7.x 的移植项目但稳定性不如 5.0.x 这个版本成熟。2.2 第一次启动让 redis-server 跑起来解压完成后打开 cmd 或 PowerShell切换到 Redis 目录然后前台启动cd C:\Redis redis-server.exe redis.windows.conf这里要注意一定要带上配置文件参数。如果你只敲redis-server.exeRedis 会加载内置默认配置默认配置没有密码、没有持久化、日志直接打印到控制台后续使用会很被动。带上redis.windows.conf后端口、持久化、日志这些才能按照文件里的预设来。如果一切正常终端会输出 Redis 版本号、Running modestandalone、port6379这样的信息。看到The server is now ready to accept connections on port 6379就成了。然后新开一个终端用客户端验证redis-cli.exe ping返回PONG说明服务端和客户端都正常。这里有个小坑很多人以为双击redis-server.exe就是启动了然后不知道怎么验证。其实redis-cli这个客户端工具才是你验证和操作 Redis 的入口后面所有命令都靠它。2.3 注册成 Windows 服务不用每次手动开每次开个黑窗口跑 redis-server 确实不方便尤其是重启电脑之后容易忘。这个移植版内置了服务注册能力一条命令解决redis-server.exe --service-install redis.windows.conf --service-name Redis redis-server.exe --service-start --service-name Redis第一句是安装服务第二句是启动服务。注册成功后在 Windows 服务管理器里能看到一个叫 Redis 的服务默认开机自启也可以通过sc stop Redis、sc start Redis控制启停。卸载服务用redis-server.exe --service-uninstall --service-name Redis这里重点提醒--service-install后面一定要带配置文件路径不然服务会以默认配置运行。很多教程只写了前半句你照着做完了发现服务起来了但密码没有、持久化也没有排查半天才发现是配置文件没指定。如果你直接 cd 到 C:\Redis 目录下执行redis.windows.conf会相对路径找到但我还是建议写全路径比如C:\Redis\redis.windows.conf一劳永逸。2.4 redis.windows.conf 里必改的 6 个参数服务能跑只是第一步配置文件不改后面迟早要出问题。我通常建议把redis.windows.conf复制一份改成redis.conf再基于这份去改保留原始文件做对比。以下参数按需调整port 6379默认端口。如果本机 6379 被占用可以改成 6380 之类的但要记得客户端连接时也带上。bind 127.0.0.1只允许本机连接。本地开发就保持这个最安全。如果你需要在局域网内让别的机器访问可以改成bind 0.0.0.0但接下来两件事必须做到位否则等于裸奔。protected-mode yes保护模式一定要开着。这个机制是当 Redis 没有设置密码、并且监听在非本机地址时会拒绝所有来自外部的连接防止被扫描到后滥用。千万不要为了省事关掉它。requirepass yourpassword本机开发我建议也设置一个密码哪怕很简单。别小看这一步很多扫描工具就是盯着 6379 端口扫的设了密码能挡住绝大多数风险。设置密码后redis-cli连接要加-a参数或者进入后再执行AUTH yourpassword。maxmemory 256mb限制 Redis 能占用的最大内存。Windows 版对内存的管理没有 Linux 那么好不设置上限的话数据量一多就可能把系统内存吃满。设了上限后建议同时设置maxmemory-policy allkeys-lru让 Redis 在内存满时自动淘汰不常用的 key。appendonly yes开启 AOF 持久化并配appendfsync everysec。Redis 默认用 RDB 快照保存数据触发条件没达到时数据容易丢AOF 相当于把每次写操作都记下来重启后重放数据安全性高很多。修改完配置后如果注册的是服务要sc stop Redis再sc start Redis重启如果是前台启动直接 CtrlC 停掉再重新启动。3. 方案二WSL 2 里跑官方 Linux 版跟线上一个样3.1 开启 WSL 2 并安装 UbuntuWin10 2004 及之后的版本都支持 WSL 2开启方式很简单以管理员身份打开 PowerShell执行wsl --install -d Ubuntu首次执行会自动启用“适用于 Linux 的 Windows 子系统”功能大概率会提示重启重启后继续安装。如果你之前没开过虚拟机平台可能还需要在 BIOS 里打开虚拟化支持常见报错是please enable the Virtual Machine Platform去“启用或关闭 Windows 功能”里勾上“虚拟机平台”就行。装好后首次进入 Ubuntu 会要求设置用户名和密码这个密码是 Linux 里的 sudo 密码别拿去当 Redis 密码容易串味。3.2 用 apt 装 Redis注意别依赖 systemd进入 WSL 终端先更新软件源再安装sudo apt update sudo apt install redis-server -y安装完成后redis-server --version可以看到版本一般比 Windows 移植版新得多。配置文件在/etc/redis/redis.conf。这里有个 WSL 特有的坑很多精简 WSL 发行版默认没有启动 systemd所以sudo systemctl start redis-server可能会报错或卡住。我自己踩过这个坑之后现在在 WSL 里都是直接执行redis-server /etc/redis/redis.conf或者用sudo service redis-server start这种传统 init 方式。前台启动的窗口不要关它关闭 Redis 也就停了。如果你需要后台运行可以用 nohup或者干脆用service方式。3.3 从 Windows 连接 WSL 内的 RedisWSL2 底层是一个轻量虚拟机网络模式和宿主机之间是 NAT。但微软做了一层 localhost 转发你从 Windows 里访问localhost:6379正常情况下会直接映射到 WSL 里的 6379。也就是说装好后你在 Windows 命令行执行redis-cli -h localhost -p 6379 ping大概率直接 PONG。不过也有一部分情况连不上最常见的原因就是 Redis 配置文件里的bind设置。默认配置里有bind 127.0.0.1 -::1在 WSL 的某些转发模式下会导致 Windows 访问被拒。遇到这种情况把/etc/redis/redis.conf里的bind行注释掉或者改成bind 0.0.0.0然后重启 Redis 就好了。但要注意改成监听所有网卡后WSL 内部如果有服务会暴露出来配合密码和设备防火墙去用别裸奔。3.4 WSL 方案的数据位置和备份思路用 apt 安装的 Redis数据默认存放在/var/lib/redis/目录下RDB 快照文件一般是dump.rdb开启 AOF 后会有appendonly.aof。这里给一个实操建议不要因为 WSL 能访问 Windows 盘就把 Redis 的持久化文件放到/mnt/c之类的目录下。WSL 跨文件系统读写性能很差而且 Windows 和 Linux 的文件权限模型不同容易出权限问题。正确做法是让 Redis 把数据写在 WSL 自己的文件系统里然后通过定时的方式备份到 Windows 盘。比如在 WSL 里写个 crontab每天凌晨把 dump.rdb 复制到/mnt/d/redisdump下既保证性能又有备份兜底。4. 方案三Docker 一条命令起 Redis干净又省心4.1 Docker Desktop 环境准备如果你更喜欢隔离环境Docker 是最省心的选择。在 Win10 上装 Docker Desktop安装时勾选“Use WSL 2 based engine”装完后确认docker --version docker compose version两个命令都有输出就说明 OK 了。如果之前装过 Docker Toolbox最好先彻底卸载不然新版 Docker Desktop 和它抢参数会遇到一些奇奇怪怪的连接错误。4.2 用 docker run 快速起一个实例拉官方镜像并启动docker run -d --name redis-dev -p 6379:6379 redis:7-alpine这句的意思是后台启动一个容器容器名redis-dev把宿主机的 6379 映射到容器的 6379镜像用 Redis 7 的 Alpine 精简版。启动后用容器里的 redis-cli 验证docker exec -it redis-dev redis-cli ping看到 PONG 就成功了。这个方案的优点是你随时可以换版本比如想要 Redis 6 就把redis:7-alpine改成redis:6-alpine删掉容器重新跑一遍完全不影响宿主机。不过这里必须提醒官方镜像默认启动后不带密码如果你在开发机上把 6379 端口映射到宿主机并且宿主机在局域网里其他人可能直接扫到你的 Redis。最简单的保护方式是在启动时直接给参数docker run -d --name redis-dev -p 6379:6379 redis:7-alpine redis-server --requirepass yourpassword --appendonly yes这样容器内 Redis 启动时自动启用密码和 AOF适合快速测试。4.3 用 docker-compose 管理配置和持久化要正经使用建议直接上 compose 文件比 docker run 敲一长串参数清晰得多。在项目目录建一个docker-compose.ymlservices: redis: image: redis:7-alpine container_name: redis-dev restart: always ports: - 6379:6379 command: [redis-server, /usr/local/etc/redis/redis.conf] volumes: - ./redis.conf:/usr/local/etc/redis/redis.conf - redis-data:/data volumes: redis-data:你的自定义配置放在同目录的redis.conf里里面配置密码、持久化、maxmemory 等。启动docker compose up -d停止和删除docker compose down数据卷是redis-data就算容器删了重新up数据还在。这个方案适合多项目开发每个项目一套 composeRedis 相互隔离再也不用来回改配置。4.4 三种方案的适用场景对照到这里三种方式你都见过了做个对照原生移植版最轻量启动 5 秒方便日常本地调试但版本偏老不适合压测。WSL2 官方版和 Linux 生产环境一致兼顾学习和实战适合认真用 Redis 的人。Docker 容器版最干净版本切换成本最低适合需要模拟集群、主从复制的场景。选哪个不重要重要的是你能在 Win10 上稳定跑起来一个合用的 Redis接下来我们聊聊验证和工具链。5. 装完先别急着写代码验证、选个趁手工具5.1 命令行验证常用命令不管用哪种方案装好 Redis先跑一遍下面的命令确认功能完整redis-cli ping连通性返回 PONG 就说明服务正常。redis-cli info memory看内存使用、配置的 maxmemory 是否生效。redis-cli info stats看连接数、命中率等基础统计。set user:1 zhangsan、get user:1写入和读取一个字符串。type user:1查看 key 类型。expire user:1 60、ttl user:1设置过期时间、查看剩余时间。lpush mylist a b c、lrange mylist 0 -1列表写入和全量读取。这里特别提醒一个命令keys *可以列出所有 key本地学习完全没问题但在生产环境千万别乱用。因为KEYS的时间复杂度是 O(N)key 很多时会让 Redis 阻塞影响线上请求。上线后排查 key 用SCAN一次一批不阻塞。5.2 可视化工具怎么选命令行够用但看 key 结构、看过期时间、批量导入导出还是要一个 GUI 工具。我常用的有这几个Another Redis Desktop ManagerGitHub 上开源免费跨平台中文支持好支持 SSH 隧道连接配置也比较直观是我现在的主力工具。Redis InsightRedis 官方出品的 GUI功能很强能看慢日志、分析 RedisJSON、查看 key 空间适合进阶排错。老牌 Redis Desktop Manager功能全但新版高版本功能开始收费旧版本很多人还在用界面稍老。VSCode 插件比如Redis插件适合程序员不想切窗口的情况看看 key 没问题深度操作还是差点意思。不论用哪个 GUI连接参数就是 host、port、password 三件事。如果密码设置了但 GUI 里不填就会报NOAUTH Authentication required。本机连接失败的话继续看第 6 节的排查思路。5.3 程序连接示例以 Python 和 Java 为例装完 Redis 你大概率要用程序去连这里各给一个最简示例。Python 用 redis-pyimport redis r redis.Redis( host127.0.0.1, port6379, passwordyourpassword, decode_responsesTrue ) r.set(foo, bar) print(r.get(foo))Java 用 Spring Data Redis 时在application.yml里配置spring: data: redis: host: 127.0.0.1 port: 6379 password: yourpassword timeout: 5s connect-timeout: 5s lettuce: pool: max-active: 8 max-idle: 8其中timeout不一定越大越好但太小了容易出现“明明 Redis 正常却报超时”的假象。真遇到超时报错排查方向在第 6 节会细讲。6. 常见问题与排错实录6.1 服务起来一会就挂先看日志再下结论Windows 服务方式启动 Redis如果失败默认日志可能只写到 Windows 事件查看器里看起来特别费劲。我的习惯是遇到服务启动失败先从前台启动方式还原现场。redis-server.exe C:\Redis\redis.windows.conf前台运行时错误会直接打印在终端比如配置语法错误、dir目录不存在、端口被占用等一眼就能看到。最常见的几个原因端口被占用执行netstat -ano | findstr 6379能看到占用该端口的 PID再tasklist | findstr PID确认是谁。以前有同事用 6379 跑了个别的服务Redis 怎么都起不来这种问题不看日志根本猜不到。配置文件路径错误--service-install后面没带配置文件服务以默认配置跑没有密码、没有持久化。dir 目录不存在配置里写了dir C:/Redis/data但这个目录没创建Redis 启动时写 RDB 会失败。6.2 连接超时从端口、防火墙到慢命令客户端报Could not connect、Connection refused或者 Java 项目里出现Redis command timed out; nested exception is io.lettuce.core.RedisCommandTimeoutException先按顺序排查第一步测端口通不通。Windows 上可以这样Test-NetConnection 127.0.0.1 -Port 6379或者telnet 127.0.0.1 6379。如果端口不通大概率是服务没起或者防火墙拦截。第二步看 Redis 的 bind 和 protected-mode。如果 Redis 只监听 127.0.0.1其他机器当然连不上如果监听 0.0.0.0 但没设密码保护模式又开着外部连接会被拒绝。这俩配置是最容易出问题的地方。第三步如果是 Spring Data Redis 这种客户端报超时先别急着调大 timeout。用redis-cli --latency看本机到 Redis 的延迟再用SLOWLOG GET 10看有没有慢命令。我见过不少项目 Redis 服务本身没问题是某次大 key 扫描或者KEYS *把 Redis 卡住了后续命令全部排队超时。这属于应用层问题调 timeout 没用得从根源优化。6.3 密码配置后连不上NOAUTH 的排查如果设置了requirepass客户端报NOAUTH Authentication required说明你没带密码报WRONGPASS invalid username-password pair说明密码不对。命令行方式redis-cli -a yourpassword pingPython 里是password参数Java 里是配置里的password字段。另外注意requirepass是明文写在配置文件里的如果你要把配置提交到 Git 仓库最好用环境变量替换别让密码跟着代码库走。6.4 重启丢数据持久化没配好很多人测试 RedisSET 了几条数据重启服务发现全没了第一反应是“Redis 是不是坏了”。其实大概率是持久化没触发。默认 RDB 快照的规则是900 秒内至少 1 次写300 秒内至少 10 次写60 秒内至少 10000 次写你只写了几条测试数据后又很快重启没达到触发条件快照自然没生成。解决办法有两个手动执行一次SAVE或BGSAVE立刻生成 RDB 快照。开启appendonly yes用 AOF 把每次写操作都记录下来重启后自动重放数据更稳。我个人的习惯是开发环境也开 AOFappendfsync everysec的磁盘开销可以忽略不计但换来了重启不丢数据的安心感。AOF 文件会随着写操作不断增大可以定期用BGREWRITEAOF做一次重写压缩。6.5 Windows 版在内存压力下的表现Windows 移植版在日常开发中很省心但遇到并发高、数据量大、频繁BGSAVE时表现确实不如 Linux 版。因为 Windows 版在实现 fork 这类机制时需要模拟内存占用越大卡顿和崩溃的风险越高。我自己的经验是本地开发用移植版没问题但压测、生产模拟这类场景不要用。如果你准备跑高并发压测老老实实切到 WSL2 或 Docker跑 Linux 版 Redis结果才有参考价值。6.6 防火墙误伤加规则而不是关防御有人说 Win10 下 Redis 局域网访问不了第一反应是关闭安全中心或者把防火墙整个关掉。这种操作我非常不建议系统防火墙是最后一道防线关了容易出更大的问题。正确做法是在“Windows Defender 防火墙”里新建入站规则放行 TCP 6379 端口同时限定“专用”网络和可信来源 IP。如果只是本机开发根本不用动防火墙只要 bind 127.0.0.1 就够了。别为了远程连一下 Redis把整台机器的安全防线拆了。7. 装完之后的下一步个人经验7.1 朝着缓存治理和分布式锁延伸装好 Redis 之后下一步通常就是真正去用它。如果你是为了项目用大概率会碰到缓存治理这类问题缓存穿透、缓存击穿、缓存雪崩每一个都有自己的经典解法再往后就是分布式锁用SET key value NX EX timeout这种原子命令加锁释放锁时最好用 Lua 脚本判断是不是自己的线程防止误删别人的锁。这些话题每个都能写一大篇但基础都是先有一个稳定运行的 Redis 环境。7.2 我的个人建议根据我自己在 Win10 上的使用经验简单总结一下纯本地调试代码推荐原生移植版启动快、省内存别折腾。想认真学 Redis推荐 WSL2 跑官方版本和线上环境一致遇到问题也好搜到答案。项目需要多套环境或多个版本推荐 Docker删掉重来没有心理负担。无论哪种方案密码一定要设bind 一定要收敛AOF 能开就开。最后再分享一个小技巧在 Win10 上不管用哪种方式装 Redis都建议把启动命令或者 compose 文件放到一个固定的脚本目录里写个简单的start-redis.bat或 PowerShell 脚本一键启动。这样换电脑、同事找你联调时你只需要运行一个脚本环境几秒钟就能拉起来。少踩一个坑就少一次加班。