
1. 安装前的关键决策选对方案比动手更重要1.1 Redis是什么为什么到处都要装它Redis全称Remote Dictionary Server本质上是一个基于内存的键值存储系统。你可以粗暴地把它理解成一个住在内存里的超级HashMap但这个HashMap的读写速度非常快还支持String、Hash、List、Set、Sorted Set等基础数据结构并且能在内存之外把数据定期或者按操作日志落盘。正是这套快 数据结构丰富 能持久化的组合让它成为缓存、会话共享、分布式锁、简易消息队列和排行榜等场景的首选。后端项目里只要有一两个高并发接口或者需要共享状态的模块基本就会需要Redis。所以你在本地开发、搭演示环境、跑课程项目时十有八九都要装一个。问题在于Redis官方对Windows的支持一直很暧昧Linux上一条apt install或者yum install就完事Windows和Mac则各有各的坑。1.2 Windows和Mac的安装方案对比不急着动手先把可选方案列出来心里有底之后再选一条路走。方案优点缺点适用场景Windows原生编译版5.0.14.1下载解压即用不依赖任何其他环境版本停留在5.0非官方维护快速跑通、学习测试WSL2安装Redis环境接近Linux生产环境版本可控需要安装WSL2有额外开销想模拟生产部署的Windows用户Docker容器运行Redis跨平台一致、版本灵活、部署快需要掌握Docker基础内存开销稍大团队统一环境、本地开发主力macOS Homebrew一条命令安装升级维护方便需要先搞定Homebrew网络可能要调Mac开发机首选1.3 我推荐的选型思路我自己的习惯是严格分场景来选只是听课、照着书上敲代码或者临时跑个demoWindows上直接用原生编译版最省事因为解压就能用不用理解容器、不用装额外组件。团队开发环境或者自己主力开发机我强烈建议Docker版本可以跟着官方走之后还可以用docker-compose把Redis和其他中间件一起编排起来一套配置全团队复用。Mac本地跑Homebrew最舒服因为Homebrew本身就管理了路径、服务和安全策略Redis升级也方便一条命令解决。选型完成后再按对应平台动手。下面我把Windows、Mac的完整过程分开讲最后再补一遍Docker统一方案哪个适合你就照着哪段做。2. Windows安装实录从下载到跑通第一条命令2.1 下载适合Windows的Redis版本避坑指南Windows上之前有过微软官方的Redis分支后来停更了长期停留在3.0/3.2的样子。现在社区里用得比较多的是tporadowski维护的Windows原生版本最新到5.0.14.1虽然版本号不是最新但对大多数本地开发场景已经够了。如果你非要7.x甚至更高版本那就别在下原生版上挣扎了直接切到Docker或者WSL用Windows版就没有必要硬扛低版本。下载时去GitHub对应仓库的Release页面找Redis-x64-5.0.14.1.zip。注意看文件大小下载完先确认zip能不能完整解压。我见过很多次有人下载到一半断网解压时提示文件损坏或者Zip文件格式错误重下一遍基本就能解决。解压路径建议用纯英文且不带空格的目录比如D:\Redis或者C:\Redis虽然带中文路径大多数时候也能跑但后续只要在配置文件里写路径或者用命令行脚本操作中文路径很容易出各种莫名其妙的坑。顺带提醒一句搜索redis windows 下载的时候会看到大量看起来很像官网的第三方下载站下载速度又慢又可能捆绑一堆东西。认准GitHub仓库或者官方文档里引用的渠道不要点那些高速下载站。2.2 解压启动与验证解压完之后目录里会有几个关键文件认准它们redis-server.exe服务端程序redis-cli.exe命令行客户端redis.windows.conf默认配置文件redis.windows-service.conf注册Windows服务时使用的配置文件打开cmd进入目录cd /d D:\Redis前台启动redis-server.exe redis.windows.conf正常的话终端会打印Redis的ASCII Logo和启动日志中间有一行比较关键的输出* Ready to accept connections tcp这就代表服务已经起来了默认监听6379端口。这一步先不要关这个窗口重新开一个cmd进入同一个目录运行redis-cli.exe在交互界面里输入ping如果返回PONG说明服务端和客户端都在正常工作Redis已经能用了。从下载到第一次验证通过整个过程不会超过五分钟这也是原生版最吸引人的地方。要关闭服务可以在redis-cli里执行shutdown或者直接在前台启动的窗口按CtrlC。但注意如果你是用前台方式启动的关掉窗口就等于关掉服务所以这也引出下一步注册成Windows服务。2.3 注册成Windows服务让Redis开机就跑每次都手动开一个cmd窗口去跑redis-server.exe开发时无所谓但如果你想像Linux的systemd服务一样让Redis开机自启、后台常驻那就需要把Redis注册成Windows服务。Redis for Windows的包里自带了服务注册命令。用管理员权限打开cmd进入Redis目录执行redis-server.exe --service-install redis.windows.conf --service-name Redis然后再启动这个服务redis-server.exe --service-start之后你可以在服务管理器WinR输入services.msc回车里看到名为Redis的服务也可以这样查状态sc query Redis停止服务用redis-server.exe --service-stop彻底卸掉这个服务用redis-server.exe --service-uninstall这里有个很常见的坑安装服务时如果不加--service-name默认服务名就叫Redis如果以前注册过旧实例新版本注册时容易提示服务已存在。先按服务名停止并删除旧服务再重新安装就不会冲突了。2.4 Windows安装中的几个关键注意事项第一双击redis-server.exe经常闪退。很多人刚下载完习惯性拿着鼠标去双击exe结果窗口一闪就没了误以为安装失败。实际上Redis启动时如果找不到配置文件或者配置里有非法参数终端窗口就会快速退出你看不到报错就会觉得这不就是个坏文件吗。正确的姿势是像上面那样用cmd进入目录再启动这样能看到完整报错日志排查起来有的放矢。第二Windows防火墙弹出提示时如果只是本机程序连接Redis可以点取消如果局域网里其他机器要访问这台Redis记得允许放行6379端口否则客户端连接会被防火墙拦下那种明明服务在跑别人就是连不上的尴尬情况八成就是防火墙。第三Windows版的Redis默认配置很可能绑定的是127.0.0.1也就是只允许本机访问。如果后面你用别的机器去连会一直连不上这不是Redis坏了而是配置问题具体修改方式我在第5章的配置详解部分会展开讲。3. Mac安装实录Homebrew一句话搞定附失败排查3.1 先确认Homebrew是否可用Mac上安装Redis最主流的方式就是Homebrew。第一步先确认自己的机器有没有装brew --version如果返回了版本号说明已安装如果提示command not found: brew说明还没装。Homebrew的安装命令官方长这样/bin/bash -c $(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)但这条命令在部分网络环境下经常卡在下载阶段比如卡在Updating Homebrew或者下载到一半就报错退出。我建议首次安装时直接换国内镜像源。清华、中科大等镜像站都有Homebrew的安装脚本一般是一行环境变量加上面这个官方命令或者直接用镜像站提供的替代脚本。具体操作以镜像站当前文档为准装完之后再把homebrew-core和homebrew-bottles的镜像地址也切换好这样后续brew install下载任何软件包都会稳定很多。注意切换镜像只是在普通层面做加速不要把它想得太复杂。装Homebrew的失败案例里绝大多数都是网络中断和源地址连不通这两个问题都可以通过镜像解决。3.2 安装并启动Redis确认Homebrew可用后安装就一行命令brew install redis这个过程会自动把依赖下载、编译或者直接下载预编译包然后放到Cellar目录里。安装完成后可以先确认一下版本redis-server --version正常情况下你会看到Redis 7.x的版本号比Windows原生版的5.0要新不少这也是Mac开发体验的一个隐性优势。前台启动很简单redis-server它会用默认配置启动监听6379端口。日志输出和Windows启动时长得差不多看到Ready to accept connections就代表成功了。不过Mac上更常用的做法是通过brew services把Redis注册成后台服务brew services start redis这个命令会自动以后台方式启动Redis并且开机时自动拉起。验证方式照旧新开一个终端窗口执行redis-cli ping返回PONG就是通了。3.3 配置开机自启与常用管理命令现在看看brew services到底做了什么。它本质上是在~/Library/LaunchAgents目录下注册了一个LaunchAgent所以你登录系统后这个服务会自己起来。与它配套的管理命令值得记一下查看当前服务状态brew services list输出里能看到redis是started还是stopped。停止并取消开机自启brew services stop redis重启brew services restart redis如果你不想用brew services而想纯前台方式跑就执行redis-server加配置文件路径。Mac上Redis的配置文件路径根据芯片不同有差别这两个路径非常容易记混Intel芯片Mac/usr/local/etc/redis.confApple芯片M1/M2/M3等Mac/opt/homebrew/etc/redis.conf每次修改配置文件之后如果是前台启动的就重启进程如果是brew services管理的就执行brew services restart redis让配置生效。3.4 Mac专属坑位与解决办法Mac上安装部署Redis的坑大多集中在以下几个方面。第一brew install长时间没反应大概率是网络问题。把Homebrew源切成国内镜像装起来会顺畅很多。装完Redis如果以后还要装别的包同样受益。第二启动时报错redis-server: cant open config file ...。原因很简单配置文件路径写错了。用brew services启动通常不会遇到但手动执行redis-server /etc/redis.conf这种操作时很容易踩坑。Mac上路径不是/etc/redis.conf而是上面提过的/usr/local/etc目录或者/opt/homebrew/etc目录按自己芯片去填。第三开机自启不生效。有些朋友发现重启电脑后Redis没起来先看看是不是确实用了brew services start。如果只是手动起过一次重启当然不会自启。另外不同macOS版本对LaunchAgents的处理细节有差异可以执行brew services list确认状态如果显示started就没问题。第四端口被占用。Mac上执行lsof -i :6379看哪个进程占着6379如果是不需要的进程就kill掉如果6379是你另一个服务在用的就去redis.conf里把port改成别的端口比如6380。4. Docker统一部署方案一台机器一行命令4.1 为什么我推荐开发机用DockerWindows原生版版本老Mac Homebrew流程虽然顺畅但和公司的Linux生产环境毕竟有差异。如果你的日常开发已经用Docker或者你希望跟你同事的环境完全一致那么Docker一定是所有平台里最省心的方案——没有之一。Docker的好处是官方镜像覆盖各个版本想用哪个tag就用哪个一条命令就能拉起服务不用关心宿主机是Windows还是Mac数据卷挂在本地删除容器不丢数据之后的Redis集群、主从演练docker-compose直接编排唯一门槛是你要先装好Docker。Windows上推荐Docker Desktop依赖WSL2Mac上可以下载桌面安装包或者用Homebrew装。4.2 Windows版的Docker Desktop注意点Windows上装Docker Desktop之前建议先把WSL2准备好。安装器一般会自动检测如果缺组件会提示。装好后在Docker Desktop的设置里确认Use WSL 2 based engine是开启的。启动Docker Desktop之后日常操作完全在终端里完成图形界面其实不怎么需要碰。但有一个点需要特别注意Windows上Docker Desktop需要硬件虚拟化支持老一点的CPU要去BIOS里打开VT-x/AMD-V不然装完启动不了。如果你确实打不开虚拟化就不要强行用Docker老老实实回到前面的Windows原生版方案一样能满足本地开发和学习的需要。4.3 Mac版的Docker Desktop注意点Mac上装Docker有两种常见途径官网下载Docker Desktop安装包拖进Applications就行或者用Homebrew执行brew install --cask docker。Apple芯片的Mac默认支持Docker Desktop。启动后顶部状态栏出现鲸鱼图标就说明后端在运行。Mac版Docker Desktop对内存要求偏高开发机如果只有8GB内存跑一个Redis容器问题不大但如果同时开好几个容器内存就要在Preferences里适当调大不然容器会莫名其妙被杀掉。4.4 用Docker运行Redis并持久化数据无论Windows还是Mac一旦Docker就绪Redis的启动命令就是完全一样了。先拉最新的7.x镜像再跑docker run -d --name redis-dev -p 6379:6379 redis:7.4这里-d是后台运行--name redis-dev是给容器起名-p 6379:6379把宿主机的6379映射到容器里的6379。跑起来后验证docker exec -it redis-dev redis-cli ping一样能拿到PONG。如果要设置密码可以直接在命令行里加docker run -d --name redis-dev -p 6379:6379 redis:7.4 --requirepass yourStrongPassword注意--requirepass这类参数要放在镜像名之后因为它会作为Redis服务端的启动参数传给容器内的redis-server这一点特别容易搞错。数据持久化时挂载一个本地目录docker run -d --name redis-dev -p 6379:6379 -v /path/to/redis-data:/data redis:7.4 --appendonly yes在Windows里/path/to/redis-data可以写成C:\redis-data或者D:\redis-data但在PowerShell下要注意路径转义Mac下用~/redis-data更顺。查看容器日志docker logs -f redis-dev停掉再删容器docker stop redis-dev docker rm redis-dev这套方案最大的优势是整个流程换台机器一模一样不用再背两套平台的命令。我自己的开发机就是从Windows原生版切到Docker之后再也没回去过。5. 配置文件核心参数详解别让Redis裸奔5.1 网络相关bind、port、protected-modeRedis装好能跑只是第一步。如果只是本机自嗨默认配置完全没问题但只要你想让别的电脑连上来配置文件这几个参数就必须弄明白否则你会一直被为什么连不上折磨。先看bind。默认配置里是bind 127.0.0.1意思是只有本机IP能连接Redis其他机器访问会被拒绝。开发时想局域网访问常见的写法是改成bind 0.0.0.00.0.0.0表示监听所有网卡。但这么做之后你必须配合后面的密码和保护模式设置否则你的Redis基本等于裸奔公网上扫描Redis端口的脚本一分钟能打好几百次。再看protected-mode。这是Redis在早期安全事件之后引入的保护机制默认是yes。它的规则有点绕只有既没有设置bind、又没有设置密码时保护模式才会限制只接受本机回环地址连接如果你设置了bind 0.0.0.0但密码没设置它依然会拒绝外部连接。所以不少人在没设密码的情况下改了bind发现外部还是连不上就是这个原因。还有port默认6379。如果6379被占了改成6380之类的也是常见操作客户端和程序连接的端口要跟着一起改。Windows上检查端口netstat -ano | findstr :6379Mac/Linux上检查端口lsof -i :6379看到具体进程号之后再决定是杀掉占用进程还是干脆改Redis端口。5.2 认证相关requirepass与完整连接命令设置密码是在配置文件里把requirepass那一行的注释去掉然后填上你的密码requirepass 你的密码改完后重启Redis。之后客户端连接时就要带密码了redis-cli -a 你的密码这里提醒一个细节命令行里直接带密码进程列表里会明文显示旁边的人或者监控脚本执行ps就能看到密码。为了安全可以不用-a而是通过环境变量传递export REDISCLI_AUTH你的密码 redis-cli这样密码就不会出现在命令行参数里。程序连接的时候比如Python的redis-pyimport redis r redis.Redis(host127.0.0.1, port6379, password你的密码, decode_responsesTrue) print(r.ping())如果输出True就说明连接成功顺便验证了密码配置生效。5.3 持久化相关RDB、AOFRedis是内存数据库数据默认都存在内存里但Redis提供了持久化机制能挽回内存数据丢失之后的损失。持久化有两个兄弟RDB和AOF。RDBRedis DataBase按配置的规则把某个时间点的内存快照写进dump.rdb文件。默认配置类似save 900 1 save 300 10 save 60 10000意思分别是900秒内至少有1次写入触发一次快照300秒内至少有10次写入触发一次快照60秒内至少有10000次写入触发一次快照你可以在redis.conf里按自己的数据量调整。RDB文件小、恢复快但因为是定时快照可能丢最后一次快照之后的数据。AOFAppend Only File记录每条写操作命令追加到appendonly.aof文件里。默认是关闭的需要改配置appendonly yesAOF可以设置appendfsync策略everysec每秒钟同步一次是比较折中的选择最多丢1秒数据。生产环境经常两者组合用RDB做快照恢复主力AOF保证更细的日志。Windows原生5.0的配置里也支持这些参数在redis.windows.conf里改即可。改的时候注意保持配置语法正确Redis配置文件的形式是配置项 值不要加多余的空格缩进。Mac或Docker容器内同理。数据文件默认会写在配置里dir指定的目录Windows下默认可能是./也就是启动目录最好改成你明确的一个路径不然服务注册成Windows服务后工作目录会变化dump文件就会写到莫名其妙的地方。5.4 内存相关maxmemory和淘汰策略另一个必须提前配置的就是内存上限。Redis当缓存用的时候如果不限制内存写多少它就吃多少最后把机器内存吃完整个系统都可能卡死。所以生产环境基本都会设maxmemory 2gb数值根据机器内存和业务量来定。当内存达到上限时新写入怎么处理由maxmemory-policy决定。常用策略有allkeys-lru在所有key里按LRU淘汰最久没用的volatile-lru只在设置了过期时间的key里淘汰allkeys-lfu按LFU淘汰访问次数最少的noeviction写不进去直接返回错误数据库模式常用如果做纯缓存我一般用allkeys-lru如果Redis里还存了不能丢的业务数据不要轻易用allkeys-lru否则数据被淘汰哭都来不及。6. 高频坑位预警安装部署踩坑实录6.1 Windows高频问题第一个redis-server.exe双击闪退。前面提过本质是配置加载失败或者找不到配置文件。用cmd方式启动就能看到完整报错。常见原因是配置文件路径写错、配置里出现非法字符、或者工作目录里没有配置文件。第二个启动后redis-cli连不上。先在cmd里执行netstat -ano | findstr :6379如果没有输出说明服务没起来如果有输出但本机都连不上八成是配置里bind设为了非本机地址改回127.0.0.1重启。如果本机能连、局域网其他机器连不上重点查Windows防火墙和bind 0.0.0.0。第三个运行一会儿出现MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk。意思是快照写盘失败服务为了安全会拒绝写操作。常见原因是当前目录无写权限或者磁盘满了。把配置文件里的dir改到有写权限的目录比如D:\Redis\data确认目录存在且当前用户能写基本就能解决。第四个Windows服务卸载不掉。注册服务后如果用普通权限的cmd执行--service-uninstall有时会提示没有权限需要管理员权限重试。如果报告服务不存在但services.msc里还有残留可能是服务名不一致用sc delete 服务名清理。6.2 Mac高频问题第一个brew安装时卡住。多数是网络问题。把homebrew-core和bottles换到国内镜像然后重新update。安装完成前不要强行CtrlC否则可能残留半成品后面再装会报各种奇奇怪怪的错。第二个brew services start redis报错Error: Failure while executing; /usr/bin/launchctl bootstrap。常见于macOS版本更新后launchctl的语义发生变化。先用brew services kill redis清理再brew services start redis重新注册实在不行就改用手动方式redis-server --daemonize yes临时后台运行。第三个修改配置后没有生效。检查配置文件路径和实际启动时加载的配置文件是否一致。手动启动时如果直接执行redis-server它加载的可能是默认配置不是你改的那个文件。启动时显式指定配置路径redis-server /usr/local/etc/redis.conf这样最稳妥。6.3 跨平台通用问题速查表把几个高频问题做成速查表排查起来特别方便现象可能原因排查与解决办法redis-cli ping 返回 connection refused服务没启动或端口不对启动服务检查port是否正确ping 提示 NOAUTH Authentication required服务端设置了requirepass用redis-cli -a 密码 连接外部机器连接不上本机可以bind限制或protected-mode拦截改bind 0.0.0.0设置密码按需关保护模式写数据后重启丢失持久化没配置配置RDB或AOF确保dir目录可写内存占用一直涨没设置maxmemory设置maxmemory和maxmemory-policy6379端口被占用别的进程占用了netstat/lsof查看进程ID杀掉或改Redis端口再补一个可视化客户端的建议。刚装完Redis用命令行验证没问题之后我建议装一个图形化客户端来检查key的情况。官方推荐Redis Insight社区里还有Another Redis Desktop Manager等选择按自己习惯选一个就行。连接配置都一样填主机、端口、密码能连上说明你的安装和配置就彻底验证通过了。最后分享一个小绝招无论是Windows、Mac还是Docker里以后只要不确定Redis服务有没有正常起最快最直接的办法就是redis-cli ping。返回PONG就说明服务链路通了。所有花里胡哨的问题都可以往启动、端口、密码、保护模式、持久化目录这五个维度去查Redis就没有解决不了的问题。我个人实际部署下来的体会是Redis装起来不难难的是大部分人第一次遇到的问题都出在环境假设上。比如以为Windows可以直接跑最新版以为brew一定装得上以为改了配置文件就一定会被加载。只要把方案选型、配置文件路径、启动方式这三个关键点搞清楚Windows和Mac其实就是同一件事只是入口不同。这篇文章里写的都是我这些年亲手踩过的坑按这个流程操作至少能让你少走一两个星期的弯路。后面等你再装MySQL、Elasticsearch、消息队列这些中间件的时候你会发现很多排查思路完全是通用的到时候用这套方法论去定位问题你会感谢Redis帮你练出来的手感。