
Redis这名字做后端的朋友应该都不陌生——一个开源的内存数据结构存储系统平时用得最多的是缓存、会话共享、消息队列、排行榜、分布式锁这些场景。我最早接触它还是大学做课程设计的时候那会儿Windows上还能直接下到微软官方维护的移植版安装包双击装完就能跑。但现在情况完全变了Redis官方明确表示不维护Windows版本网上那些下载msi一路下一步的老教程照着做大概率是要扑街的。很多刚开始学Redis的同学第一关就卡在安装上——版本选不对、服务起不来、密码设不上、连不上客户端折腾一晚上还没跑出一个PONG。这篇教程我把Windows和Linux两条线都写透Windows上现在到底该用哪个版本、有哪几条可行安装路线、每个路线有什么坑Linux上从源码编译到apt/yum装包再到密码配置、systemd开机自启、系统参数调优一条龙讲完整。不管你是想在自己笔记本上做实验还是要在服务器上搭一套能抗生产的Redis下面的步骤都能直接照着抄。1. 装Redis前先想清楚这三个问题1.1 Redis到底帮你解决什么问题一句话讲清楚Redis把数据放在内存里读写速度比磁盘上的传统数据库快几个数量级。如果你把MySQL的热点查询结果丢给Redis压测时就能明显看到数据库QPS压力降下来接口响应时间也从几十毫秒降到几毫秒。除了做缓存Redis还被拿来干很多杂活分布式锁、计数器、点赞列表、排行榜、消息队列、轻量级发布订阅。所以它不是要不要学的问题而是做后端基本绕不开的基础设施。安装之前真正要想清楚的是你的场景本机学习、开发调试和上生产是两个完全不同的标准。本机怎么折腾都行生产环境则要考虑版本稳定性、数据持久化、安全认证、开机自启、系统参数调优。我见过太多人把本机那套双击启动、裸奔无密码的习惯直接搬到服务器上后果往往是被扫库、被勒索、数据全丢。后面的配置部分我会把生产环境真正该做的事都交代清楚。1.2 版本怎么选别追最新但要会选Redis的版本演进有几个重要节点6.0引入ACL访问控制列表和多线程IO7.0引入Function和Multi-Part AOF7.2修复了大量持久化和集群稳定性问题。我的选型建议很简单生产环境装7.2.x目前看稳定性和性能都比较平衡。学习环境装6.2或7.0都行功能足够练手。如果只能在Windows上装大概率只能拿到5.0.14社区移植版因为Windows移植版基本停在5.0这个版本。为什么要强调版本因为很多新人装了老古董之后发现ACL命令没有、集群配置跟文档对不上折腾半天还以为是自己的问题。装之前先执行一次redis-server --version看清楚版本再动手能省后面一堆事。1.3 端口、内存、持久化三个概念先建立不管在哪个平台装Redis你都要先建立三个基本概念。第一端口默认是6379所有客户端、工具、防火墙策略都围绕它转第二内存默认不设上限Redis把所有数据放在内存里如果数据量超过物理内存就会用swap性能会急剧劣化所以生产环境几乎必设maxmemory第三持久化默认开RDB快照想更稳可以额外开AOF追加日志代价是磁盘写放大。尤其要记住官方默认配置里maxmemory是空的等于不限内存。这是很多新手踩的第一个坑——数据量一上去Redis把服务器内存吃满直接拖垮整个系统。后面初始化配置那一节我会给出具体的设置建议。2. Windows下安装Redis三条可行路线照着抄就行2.1 路线一社区维护版5分钟快速跑起来最简单的方法是使用GitHub上的tporadowski/redis项目这是目前Windows下维护最好、下载量最大的Redis移植分支版本稳定在5.0.14。这个项目本质上是把Linux版源码移植到Windows平台的二进制分发安装过程非常简单到Release页面下载zip包解压到一个固定目录比如D:\Redis。建议路径别带空格也别放C盘系统目录否则后面注册Windows服务时容易遇到权限问题。双击redis-server.exe或者打开cmd进入目录执行redis-server.exe。一切正常的话你会看到经典的Redis logo和端口6379的提示。另开一个cmd窗口执行redis-cli.exe ping。返回PONG说明服务端已经正常工作。这三步是裸跑模式配置全是默认值。临时测一下没问题但你要在本机长期使用建议再做两步打开redis.windows.conf设置requirepass密码然后把Redis注册成Windows服务实现开机自启。注册服务的命令如下必须以管理员身份打开cmd并且先把工作目录切到Redis所在目录redis-server --service-install redis.windows.conf --loglevel verbose redis-server --service-start提示这个移植版的线程模型、fork行为跟Linux原版有区别学习、开发完全够用但别拿它跑生产。生产环境请老老实实用Linux。2.2 路线二用Docker Desktop跑容器版Redis如果你的机器装了Docker Desktop那Windows下跑Redis可以完全绕过Windows移植版这个坑直接在容器里跑官方镜像。Redis官方Docker镜像本质是Linux容器所以行为跟Linux原版几乎一致版本还能随便选。最简启动命令docker run -d --name redis-local \ -p 6379:6379 \ -v redis-data:/data \ redis:7.2 --appendonly yes --requirepass 123456参数逐个解释-d是后台运行--name给容器命名-p 6379:6379把容器内6379映射到宿主机6379本机的redis-cli和桌面工具都能直接连-v redis-data:/data把数据持久化到Docker命名卷否则容器删了数据全没镜像名后面跟的--appendonly yes --requirepass 123456是在命令行直接覆盖配置相当于启动时就开启AOF持久化和设置密码。启动后验证docker exec -it redis-local redis-cli -a 123456 ping返回PONG就正常。这条路线的优点是版本新、环境干净、贴近生产。缺点是Docker Desktop本身要吃不少内存低配笔记本跑起来明显发烫。如果你后面想玩主从复制用docker-compose一把起两个容器也很方便核心配置就是replica容器里加一行replicaof master容器的IP和端口。2.3 路线三用WSL2装原生Linux版Redis个人最推荐如果既想用Windows桌面又想用真正的原生Linux RedisWSL2是目前体验最好的方案。微软官方商店里直接装Ubuntu然后三条命令sudo apt update sudo apt install redis -y sudo service redis-server start三步就跑起来了拿到的还是Linux x86_64原版二进制版本也新。在WSL2里可以用redis-cli正常操作也可以从Windows侧用Redis Desktop Manager等可视化工具连127.0.0.1:6379。WSL2默认是NAT网络但Windows侧访问WSL2里的服务是通的不需要额外做端口映射。这条路线的优势是接近生产环境、能装最新版、跟所有Linux教程无缝衔接。缺点是WSL2占内存跨文件系统操作磁盘IO时会慢一些。我自己现在的笔记本就是Windows WSL2 Docker Desktop三件套日常Redis相关操作基本都在WSL2里做很少碰Windows移植版了。2.4 Windows装完必做的三个检查不管走哪条路线装完都建议做一次三连检查能规避掉绝大多数装上了但连不上的尴尬。第一检查端口没被占用。如果启动时报错多半是6379被别的程序占了。Windows下用netstat -ano | findstr 6379查端口再用taskkill /PID /F关掉占用进程。第二检查防火墙。如果只在本机用Redis绑定127.0.0.1就行防火墙不用特殊处理但要让局域网其他机器访问就必须在防火墙入站规则里放行6379端口。Windows弹出的允许访问对话框要点允许很多人随手关掉弹窗结果别人永远连不上。第三检查客户端工具。命令行能连通只是第一步日常排查数据还是需要可视化工具。老牌的Redis Desktop Manager官方新推出的RedisInsight还有国产开源的Another Redis Desktop Manager随便选一个能连上、能看key列表就行。我在Windows上踩过最深的一个坑双击redis-server.exe后窗口一闪而过什么提示都没有。后来用cmd命令行前台跑才发现是redis.windows.conf里某个参数写错了。Windows移植版不像Linux原生版会把日志写到logfile默认前台输出你不保留命令行看输出出了错根本不知道原因。3. Linux下安装Redis从源码编译到systemd托管一条龙讲完3.1 生产环境最推荐源码编译安装Linux下装Redis有两条主流路线包管理器安装和源码编译安装。搭生产环境我强烈建议源码编译。原因有三个包管理器里的Redis版本普遍滞后。Ubuntu 22.04默认源的redis-server是6.0.16CentOS 7默认源里甚至只有3.2这些老版本缺失ACL、多线程IO等重要特性。源码编译可以自定义安装路径、编译参数跟现有系统的目录规范更好融合。Redis官方对源码编译的支持最完整安装过程短、依赖少出问题也好排查。第一步准备编译依赖sudo apt install -y gcc make pkg-configCentOS系用yum install -y gcc make。gcc版本最好在8以上太老的编译器编新版Redis会直接报错。第二步下载官方源码包wget https://download.redis.io/releases/redis-7.2.4.tar.gz tar xzf redis-7.2.4.tar.gz cd redis-7.2.4第三步编译并安装到指定目录make -j$(nproc) sudo make install PREFIX/usr/local/redismake -j后面的数字是并行编译线程数用$(nproc)自动取CPU核数速度可以快很多。PREFIX/usr/local/redis的含义是把可执行文件装到/usr/local/redis/bin下不污染系统默认目录。这步做完后你会在bin目录里看到redis-server、redis-cli、redis-benchmark、redis-check-aof、redis-check-rdb这几个工具。编译时我遇到过一个问题缺少依赖或编译器版本不合适会导致make报错报错信息经常出现在jemalloc内存分配器编译环节。这时可以用make MALLOClibc跳过jemalloc改用系统自带的libc分配器。开发环境这样跑没问题生产我还是建议把编译依赖装齐用jemalloc因为它在内存碎片控制上表现更好。安装完记得把二进制路径加进PATH不然每次都得写全路径echo export PATH/usr/local/redis/bin:$PATH ~/.bashrc source ~/.bashrc3.2 快速开发环境apt/yum一把梭如果是本机或开发环境图省事包管理器更合适。Ubuntu/Debian系sudo apt update sudo apt install redis-server -y sudo systemctl enable --now redis-serverCentOS/RHEL系稍麻烦CentOS 8以后的AppStream源里有redis 6.xCentOS 7默认源只有3.2想用新版得启用EPEL或Remi源。比较普适的做法sudo yum install -y epel-release sudo yum install -y redis装完执行sudo systemctl enable --now redis。包管理器装的Redis自带systemd服务文件和配置文件开箱即用这是它比源码编译方便的地方。代价是版本由发行版仓库说了算除非手动维护源否则拿不到最新大版本。3.3 安装后的初始化配置守护进程、密码、绑定地址无论哪种方式装的装完都要改配置。源码编译装的配置文件在源码目录里的redis.conf建议复制到统一位置管理sudo mkdir -p /etc/redis sudo cp redis.conf /etc/redis/redis.conf下面这几个配置项每次装完必改# 监听地址默认127.0.0.1如需外部访问改成0.0.0.0 bind 0.0.0.0 # 保护模式设置密码后它才有实际意义 protected-mode yes # 设置密码生产环境必须有 requirepass YourStrongPassword # 内存上限这里配512MB maxmemory 512mb # 内存淘汰策略缓存场景用allkeys-lru maxmemory-policy allkeys-lru # 开启AOF持久化 appendonly yes逐条解释一下。bind 0.0.0.0意味着监听所有网卡如果服务器有公网IP这一步等于把Redis暴露到公网了所以必须配requirepass并且用防火墙限定来源IP。安全没有中间态bind 0.0.0.0 强密码 防火墙限定来源三者缺一不可。protected-mode yes是一个保底机制当Redis没设密码、且绑定了非本机地址时会自动拒绝外部连接。requirepass设置后所有客户端连接都要先auth最常见的报错是NOAUTH Authentication required。maxmemory和maxmemory-policy是防止Redis吃爆内存的关键。allkeys-lru意思是所有key都参与LRU淘汰适合纯缓存场景如果你有些key绝不能丢比如分布式锁、待处理任务就用volatile-lru只淘汰设置了过期时间的key。appendonly yes开启AOF持久化重启后可以从AOF日志恢复数据比RDB快照的丢失窗口小很多。代价是磁盘写入变多纯缓存场景可以不追求但数据重要就开着。3.4 开机自启与systemd服务托管源码编译安装的Redis默认没有systemd服务文件需要手动配。Redis源码包里其实自带了一个模板utils/systemd-redis_server.service。把它复制到系统服务目录并修改sudo cp utils/systemd-redis_server.service /etc/systemd/system/redis.service sudo vim /etc/systemd/system/redis.service我把服务文件改成这样[Unit] DescriptionRedis In-Memory Data Store Afternetwork.target [Service] Userredis Groupredis ExecStart/usr/local/redis/bin/redis-server /etc/redis/redis.conf --supervised systemd ExecReload/bin/kill -s HUP $MAINPID ExecStop/bin/kill -s TERM $MAINPID LimitNOFILE10240 PrivateTmptrue [Install] WantedBymulti-user.target几个关键点。第一建议创建redis专用系统用户别用root跑Redisuseradd -r -s /sbin/nologin redis。Redis这类对外服务一旦有漏洞被利用root权限意味着整个服务器沦陷。第二ExecStart里的--supervised systemd告诉Redis我被systemd托管Redis会自己完成后台化并由systemd监控这时redis.conf里不能再写daemonize yes两者混用容易出问题。第三LimitNOFILE是文件描述符上限高并发场景默认1024不够用建议调高到10240或65535。改完后重载并启动sudo systemctl daemon-reload sudo systemctl enable --now redis sudo systemctl status redis看到active (running)就说明开机自启和托管都搞定了。4. 装完别急着用先做这几步验证4.1 连通性测试ping、set/get、info不管Windows还是Linux装完第一件事永远是验证服务活着。命令行最直接redis-cli -a YourStrongPassword ping返回PONG说明服务正常。没设密码就不加-a参数。接着测读写redis-cli -a YourStrongPassword 127.0.0.1:6379 set hello world OK 127.0.0.1:6379 get hello world 127.0.0.1:6379 infoinfo输出很长重点看三个指标redis_version确认版本connected_clients确认连接数used_memory确认内存占用。有一个新手经常遇到的问题Redis明明在本机跑着redis-cli ping却报Connection refused。原因多半是redis-cli默认连127.0.0.1:6379而你的Redis绑定或端口不同。用-h和-p显式指定即可redis-cli -h 127.0.0.1 -p 6379 -a password ping4.2 用redis-benchmark快速测一把性能基线Redis自带一个基准测试工具redis-benchmark安装完成后就能用。常见命令redis-benchmark -h 127.0.0.1 -p 6379 -c 50 -n 100000 -q -a YourStrongPassword-c 50表示50个并发连接-n 100000表示总共执行10万次请求-q是精简输出只显示每秒请求数。跑完你会看到类似这样的结果PING_INLINE: 123456.79 requests per second SET: 110000.12 requests per second GET: 115000.45 requests per second单机Redis大概就是几十万QPS的量级。如果测出来只有几千QPS先别怀疑Redis很可能是虚拟机限制、WSL2磁盘IO问题、或者CPU被省电策略降频。benchmark的价值不是让数字好看而是给自己留一个基线。以后调了配置、改了系统参数再跑一次对比性能变化一眼就能看出来。4.3 验证数据持久化到底有没有生效验证持久化是很多教程忽略的一步。改完appendonly yes后建议立刻做一次断电测试用redis-cli设置几个key。执行redis-cli shutdown save或者systemctl restart redis。重启后重新连接检查刚才的key还在不在。AOF模式下重启后数据目录里会有appendonly.aof文件RDB模式下是dump.rdb。文件存在、数据能查回来说明持久化链路是通的。千万别等到真出了故障才发现AOF压根没开那时候一切都晚了。顺便说一句生产环境建议RDB和AOF都开。RDB适合做定期冷备和快速恢复AOF适合把数据丢失窗口缩小到秒级。两个都开会带来额外写入开销但对绝大多数业务来说完全可接受。4.4 用桌面工具连一次可视化收尾命令行验证没问题后我还会习惯用可视化工具连一次。日常排查时能一眼看到key列表、内存占用、过期时间分布比在命令行里一条条敲高效得多。推荐这几个连接工具RedisInsightRedis官方出品免费跨平台功能最全支持分析内存碎片、慢日志、pub/sub消息。Another Redis Desktop Manager国产开源轻量适合只要基本功能的场景。命令行党可以不用工具直接redis-cli --stat实时看状态。连接时填host、port、密码即可跟连MySQL客户端没什么两样。如果连不上90%是防火墙或binding问题按第5章的排查思路走。5. 常见问题与排查技巧实录5.1 Windows侧的高频坑第一类双击redis-server.exe闪退。前面提过Windows移植版默认前台运行闪退说明启动直接失败。正确姿势是用cmd进入目录后执行redis-server.exe --logfile redis.log让日志写文件再看报错。常见原因配置里有非法参数、6379被占用、目录权限不足。第二类端口被占用。netstat -ano | findstr 6379找到占用进程PID再用tasklist /FI PID eq xxx确认是哪个程序最后taskkill /PID xxx /F结束。如果占用者是关键系统服务不想杀进程直接把redis.windows.conf里的port改成6380。第三类注册服务后启动失败。检查管理员权限、工作目录、config路径三件事。最稳做法是在管理员cmd里cd到Redis目录再执行redis-server --service-install redis.windows.conf。第四类运行redis-server.exe时Windows提示没有被指定在Windows上运行或者它包含错误。这通常意味着VC运行库缺失或下载的二进制包不完整。去装最新的Visual C Redistributablex64一般能解决。5.2 Linux侧的高频问题与参数调优第一类make编译失败。最常见是缺gcc或gcc版本太老。Ubuntu执行apt install -y build-essentialCentOS执行yum install -y gcc make。如果报jemalloc相关错误make MALLOClibc解决。第二类启动后进程立刻消失。先看日志配置文件里daemonize yes时日志默认写到logfile指定的位置如果没配logfile就在前台跑redis-server /etc/redis/redis.conf输出会直接打在终端上。还有个细节logfile指定的目录必须存在Redis不会自动创建目录。第三类外部客户端连不上。按顺序排查三件事bind地址、保护模式、防火墙。先用redis-cli -h 服务器IP ping看是否超时再确认是否设了密码没密码时protected-mode yes会拒绝远程最后看防火墙Ubuntu用ufw statusCentOS用firewall-cmd --list-all确认6379是否放行。第四类启动日志里的WARNING。三个最常见的warning及对应解法WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.解决echo net.core.somaxconn 511 /etc/sysctl.conf sysctl -pWARNING overcommit_memory is set to 0! Background save may fail under low memory condition.解决echo vm.overcommit_memory 1 /etc/sysctl.conf sysctl -pWARNING you have Transparent Huge Pages (THP) support enabled in your kernel.解决关闭THPecho never /sys/kernel/mm/transparent_hugepage/enabled并写入开机启动脚本。这三个WARNING都是性能隐患而非致命错误不处理Redis也能跑但大流量场景会出现偶发卡顿和持久化失败。我经历过一次线上事故就是overcommit_memory没设置凌晨RDB save直接失败还好AOF兜住了数据。配置系统参数这种事装完顺手改了别拖到出事才后悔。5.3 常用配置参数速查表我把日常最常用的Redis配置整理成一张速查表贴到服务器上或者收藏起来都方便配置项默认值建议值/说明bind127.0.0.1 -::1生产视情况改0.0.0.0配合防火墙protected-modeyes保持yes别因为连不上就关掉它port6379默认即可多实例时改6380/6381requirepass空生产必设用openssl rand -base64 32生成强密码maxmemory0不限根据机器内存设置至少留30%给系统maxmemory-policynoeviction缓存场景用allkeys-lruappendonlyno数据重要就开yesappendfsynceveryseceverysec是性能和安全的平衡点save900 1 300 10 60 10000RDB快照触发频率可按需调稀timeout0不断开建议300空闲断开tcp-keepalive300保持默认daemonizeyessystemd托管时保持no配合--supervised systemdlogfile空生产设/var/log/redis/redis-server.logdatabases16默认即可慎用多库容易混淆这张表里单独强调两个参数。maxmemory-policy默认是noeviction意思是内存满了之后新的写入直接报错而不是淘汰旧key。很多人的生产缓存突然写入失败根因就是没人配过这个参数。如果明确自己是缓存用途尽早改成allkeys-lru。appendfsync everysec的意思是每秒钟把AOF缓冲区刷盘一次最多丢1秒数据是官方推荐的平衡点。极端追求性能不关心丢数据可以设no数据一点不能丢就设always但性能会明显下降。5.4 给新手的安装检查清单最后给刚接触Redis的同学一份可复制的检查清单照着走基本不会出乱子先确定目标本机学习用Windows社区版或WSL2生产用Linux源码编译。装完先看版本redis-server --version。改完配置必须重启systemctl restart redis。命令行自测三连ping、set/get、info。看启动日志有没有WARNINGjournalctl -u redis -n 50。系统参数三件套somaxconn、overcommit_memory、THP。防火墙规则确认只放行你需要来源的IP。把密码和配置备份到密码管理器别硬编码在代码里。这套清单我发给团队新人好几次照着走一遍正常情况下从零到跑通不超过20分钟。最后再分享一个我自己的习惯装完Redis后顺手把redis-benchmark的结果存下来同时记录机器的CPU型号、内存大小、内核版本。以后系统变更、版本升级之后再跑一次benchmark做对比性能是升是降一眼就能看出来。运维里很多问题不是一下子爆出来的而是慢慢劣化的。有个基线你才能在劣化刚开始的时候就发现它而不是等用户投诉了再去追查。这些年实际体会下来Redis安装这件事本身不难难的是装完之后的配置、安全、监控这一整套意识。很多人把Redis装完能ping通就觉得大功告成直到某天线上Redis被扫、被拖库、或者内存被打爆才回头翻配置。别嫌前面那些参数啰嗦都是拿真金白银的教训换来的。