1. 写在安装之前
做后端开发的,只要项目里用到缓存、session共享、排行榜或者消息队列,Redis基本是绕不开的那一个。不管你用的是Spring Boot、Express还是Gin,Redis装不好,后面写再多代码也跑不起来。
这篇文章要解决的就是这个问题:从零开始,把Redis装到你的Windows电脑和Linux服务器上,不走弯路,不踩多余坑。
先说几个需要提前知道的事实,能帮你省下大把时间:
- Windows版的Redis,官方其实不直接提供,我们用的是微软维护的移植版本和第三方社区稳定版。
- Linux版的Redis,最省心的方式是源码编译安装,因为很多Linux发行版的软件源里Redis版本偏旧,有些甚至没有。
- 安装完成后第一件事不是写代码,是用
redis-cli ping确认通没通,再顺手做个开机自启,不然服务器一重启,Redis挂了,线上马上出问题。
这篇文章适合谁看?刚接触Redis的小白、准备把Redis部署到服务器上的后端开发、还有被网上各种残缺教程坑过的人。内容分Windows和Linux两条线,每一步都给了具体命令和截图级说明,照着敲就能跑通。
2. Windows下安装Redis
2.1 选择合适的Windows版本
先说一个很多人搞不清楚的地方:Redis官网(redis.io)其实不提供Windows安装包。官方推荐的是用WSL2跑Linux版,但对大多数人来说,直接装一个原生的Windows版更省事,尤其是本地开发调试的时候。
目前在Windows上装Redis,主流有三个选择:
| 方案 | 说明 | 适用场景 |
|---|---|---|
| Microsoft Archive版 | 微软官方开源的Redis 3.x/5.x Windows移植版 | 老项目兼容用了,不推荐新项目 |
| tporadowski/redis | 社区维护的Windows移植版,支持Redis 5.x/7.x,性能稳定 | 最推荐,本地开发和测试首选 |
| Memurai | Redis API兼容的Windows原生服务,商业/免费混合 | 生产环境需要商业支持再考虑 |
我本地用的是tporadowski的redis-7.0.x版本,从GitHub Releases页面下载zip压缩包就行,不用安装,解压即用,zip包大概10MB左右。别去下载那些来路不明的exe安装包,很多捆绑了乱七八糟的东西。
下载下来之后,解压到你觉得合适的目录,比如D:\Program Files\Redis,里面会包含下面这些关键文件:
redis-server.exe # 服务端主程序 redis-cli.exe # 命令行客户端 redis.windows.conf # 配置文件(默认配置) redis-benchmark.exe # 性能测试工具 redis-check-aof.exe # AOF文件修复工具 redis-check-rdb.exe # RDB快照文件检查工具2.2 三种方式启动Redis服务
我把能用得上的启动方式都试了一遍,各有利弊,主要看你是临时用一下还是长期要用。
先是最简单的临时启动方式,双击redis-server.exe,或者用命令行进到目录里执行:
redis-server.exe这种方式启动的Redis用的是默认配置,端口6379,无密码,数据存到硬盘上的dump.rdb文件里。关掉命令窗口服务就停了,数据会保存在当前目录的快照文件里,下次启动还能恢复。适合你要快速调一下缓存逻辑,不想被后台进程干扰的情况。
第二种是指定配置文件启动:
redis-server.exe redis.windows.conf用哪个配置文件就执行对应命令,Redis会按照配置里的端口、持久化策略、密码等参数启动。注意配置文件路径没写的话,Redis会把该文件当成“不存在的配置”,直接以默认参数启动,经常有人栽在这里。录制路径建议写绝对路径,比如redis-server.exe D:\Program Files\Redis\redis.windows.conf。
第三种是最推荐的——注册成Windows服务,开机自动启动:
redis-server.exe --service-install redis.windows.conf --service-name RedisService安装完服务后可以顺手把服务改成自动启动:
# 打开服务管理器找到RedisService,改启动类型为“自动” # 或者用命令行操作: sc config RedisService start= auto启动服务:
redis-server.exe --service-start --service-name RedisService这一模式我用得最多。跑一次注册,之后Windows重启了Redis自己起,根本不用操心。要卸载服务的时候执行:
redis-server.exe --service-uninstall --service-name RedisService这里有个小细节,如果你之前的Redis进程已经被命令行方式占用6379端口,启动服务的时候会报错,先用redis-cli -p 6379 shutdown把原进程关掉再启服务。
2.3 验证Redis是否正常工作
无论你用了上面哪种方式启动,验证安装是否成功的方式都一样。新开一个cmd窗口,进入Redis目录,执行:
redis-cli -p 6379 ping如果返回:
PONG说明Redis已经在正常运行了。这个ping是Redis自带的心跳命令,能通就代表服务端在正常响应请求。
再试几个基本命令确认读写没问题:
redis-cli > set name "张三" > get name > keys *能看到name这个key的值是张三,说明整个链路已经通了,Windows这边的安装就算彻底完成。接下来可以放心地去Linux服务器上折腾了。
3. Linux下安装Redis
3.1 环境准备与依赖安装
Linux下的Redis安装,不同发行版有一些细微差别。当前主流的服务器系统就两大派系:Debian系的(Ubuntu、Debian本身)和RedHat系的(CentOS、Rocky Linux、AlmaLinux、Fedora),我分别说一下。
先确认系统版本,登录服务器后执行:
cat /etc/os-release拿到系统信息后,安装编译工具和底层依赖。
Debian/Ubuntu系:
sudo apt update sudo apt install -y build-essential libjemalloc-dev libsystemd-dev tclRedHat/CentOS系:
sudo yum install -y gcc make openssl-devel systemd-devel注意:如果用的是CentOS 8以上的版本,系统默认的包管理器是dnf,但yum命令仍然能用,处理方式没有区别。
依赖里的build-essential或gcc make是编译必需的编译器工具链。libjemalloc-dev是内存分配库,Redis官方在生产环境下推荐用jemalloc而不是默认的libc malloc,可以显著降低内存碎片。tcl是用来跑Redis自带测试套件的,虽然不影响安装,但如果后面想跑make test验证安装完整性,没有会报错。
3.2 源码下载与编译安装
我强烈建议Redis在Linux上用源码编译安装,原因就一个:可控。官方源码编译出来的版本准确、无杂质,还能按需求定制目录,升级也好控制。相比用apt/yum直接装的旧版本,源码装的最新稳定版在用Redis新特性的时候会少踩很多坑。
先到官网选版本:
cd /usr/local/src wget https://download.redis.io/releases/redis-7.2.5.tar.gz建议到https://download.redis.io/releases/页面看一下最新稳定版的版本号,能用新版本就用新版本。写这篇文章的时候7.2.5是稳定版,8.0也已经发布了,你可以根据实际需要选。
解压并进入源码目录:
tar xzf redis-7.2.5.tar.gz cd redis-7.2.5编译:
make -j$(nproc)-j参数可以加速编译,$(nproc)会自动获取CPU核心数,多核机器的编译速度会快很多。这一步时间取决于机器性能,轻量服务器大概1-3分钟。
编译完成后,立刻运行一下测试,验证编译出来的Redis是否正常:
make test这个命令会跑几十上百个测试用例,时间大概十几分钟。时间紧可以跳过,但我建议至少跑一次,尤其是为生产环境准备的时候,能把很多潜在问题提前暴露出来。
确认测试没有问题后,安装到系统目录:
sudo make install执行完,redis-server、redis-cli、redis-benchmark等可执行文件会被安装到/usr/local/bin/目录下。验证一下版本:
redis-server --version3.3 目录规划和服务配置
二进制文件安装好了,但Redis还需要一个像样的工作目录——数据文件、日志、配置文件都有地方放,才方便后续维护。
我习惯按下面的目录结构去部署:
sudo mkdir -p /etc/redis sudo mkdir -p /var/lib/redis sudo mkdir -p /var/log/redis sudo useradd --system --home-dir /var/lib/redis redis各目录用途:
/etc/redis:存放配置文件redis.conf/var/lib/redis:存放RDB快照文件和AOF日志文件,属主必须是redis用户/var/log/redis:存放Redis运行日志- 独立redis用户:让Redis以非root身份运行,降低安全风险
源码包里的redis.conf是默认配置模板,复制到配置目录下:
sudo cp /usr/local/src/redis-7.2.5/redis.conf /etc/redis/redis.conf sudo chown -R redis:redis /etc/redis /var/lib/redis /var/log/redis接下来修改配置,用vim或者你习惯的编辑器打开/etc/redis/redis.conf,重点调整几项:
bind 127.0.0.1 -::1 port 6379 daemonize yes pidfile /var/run/redis_6379.pid logfile /var/log/redis/redis.log dir /var/lib/redis requirepass your-strong-password每项的含义我解释一下:
bind:只监听本机回环地址。如果是给本机应用用的,保持这个默认,安全;如果要远程访问,改成你的内网IP或按需开放,但必须搭配密码。port:默认6379,没特殊需求不用改。daemonize:之前Windows那节我们还在手动管理进程,到了Linux建议把所有服务交给systemd托管,所以这里设置daemonize no,systemd自己管理前台进程。logfile:日志文件路径,排查问题的时候有日志比啥都强。dir:持久化文件存放目录,保证redis用户有写权限。requirepass:生产环境必须设密码,不然后果很严重。后面单独说安全。
3.4 注册为systemd服务
配置文件改好后,把Redis交给systemd来管理,这样能开机自启、崩溃自动重启、看日志都方便。创建一个systemd服务单元文件:
sudo vim /etc/systemd/system/redis.service写入以下内容:
[Unit] Description=Redis In-Memory Data Store After=network.target [Service] Type=simple User=redis Group=redis ExecStart=/usr/local/bin/redis-server /etc/redis/redis.conf ExecReload=/bin/kill -USR2 $MAINPID ExecStop=/bin/kill -TERM $MAINPID Restart=always RestartSec=5 PrivateTmp=true NoNewPrivileges=true MemoryDenyWriteExecute=true ProtectSystem=strict ProtectHome=true ReadWritePaths=/var/lib/redis /var/log/redis ProtectKernelTunables=true ProtectControlGroups=true RestrictRealtime=true [Install] WantedBy=multi-user.target注意到没有,最新的加固参数我都加上了。MemoryDenyWriteExecute防止Redis进程动态生成可执行内存段,ProtectSystem=strict让根目录只读,ReadWritePaths只放开了Redis真正需要写的那两个目录。这些都是从安全事件里总结出来的教训,配置上了安心很多。
让systemd重新加载配置并启动服务:
sudo systemctl daemon-reload sudo systemctl start redis sudo systemctl enable redis检查运行状态:
sudo systemctl status redis如果状态是active (running),并且redis-cli ping返回PONG,恭喜,Redis已经在Linux上正式跑起来了。最后再设置一个开机自启的验证,等系统重启后确认一下服务有没有自己起来:
sudo systemctl is-enabled redis输出enabled就说明开机自启已经生效。
4. 可视化工具安装与使用
4.1 RedisInsight
命令行的redis-cli用熟了以后效率很高,但要看复杂的key结构、监控内存、分析慢查询,还是得有个图形界面。官方出的RedisInsight是目前我用下来最顺手的一个,支持Windows、macOS、Linux三种平台,免费,而且功能一直在迭代。
下载地址在Redis官网的“Redis Insight”页面。选对应平台安装包,Windows下双击安装,Linux下解压tar.gz包后运行即可。启动后界面会引导你添加Redis连接,填写:
- Host:
127.0.0.1(远程服务器就填服务器IP) - Port:
6379 - Password:你的Redis密码
连上之后,左侧能看到所有的db,点进去能浏览key、看key的类型、查看过期时间,还能直接执行命令。对排查线上问题特别有用的一点是,RedisInsight有慢查询分析功能,可以看到哪些命令拖慢了Redis。
4.2 Another Redis Desktop Manager
如果你嫌RedisInsight界面太“重”,可以试试另一个开源工具Another Redis Desktop Manager,就是一个纯粹轻量级的Redis管理工具,Windows上特别推荐,启动速度快,连接配置和管理界面简单直接。GitHub搜qishibo/AnotherRedisDesktopManager,下载release包就能用。
它是Electron应用,如果你的电脑内存吃紧而Redis数据又特别多,打开大key的时候可能会卡,不过整体稳定性和日常使用体验都够用。
5. 常用配置与常见问题排查
5.1 云服务器上安装Redis最容易被攻击的几个坑
服务器上装Redis,最容易出的问题不是装不上,而是装完被人“搬库”。说出来你可能不信,互联网上天天有人扫描6379端口,只要发现无密码的Redis,直接连上去写crontab反弹shell或者写入SSH公钥,我见过太多次了。
装好在云服务器上用的Redis,下面三条守则必须记住:
- 必设密码:
requirepass参数一定要配置,而且要设一个足够强度的密码。有人觉得“我服务器IP没人知道”,这种想法太天真了,扫描器是全网段扫的。 - 禁止bind 0.0.0.0:没有特殊需求,
bind 127.0.0.1就够了。如果真的需要远程连接,限定内网IP或安全组白名单。 - 禁用危险命令:在配置文件里默认把
CONFIG这几个危险命令改名或者禁用,防止“连上之后改配置”。
常见禁用配置写法:
rename-command CONFIG "" rename-command SHUTDOWN "" rename-command FLUSHALL "" rename-command FLUSHDB ""5.2 连接不上时的排查思路
如果你启动服务正常但客户端连不上,别着急,按照下面的顺序排查,基本都能定位问题:
- 服务有没有监听正确端口:
ss -tnlp | grep 6379,看进程有没有起来。没有就回去看配置文件有没有语法错误。 - 防火墙是否放行:Linux上检查
firewalld和云服务商的安全组规则。很多新手在本地都能连,上了云服务器就卡在这一步——安全组没开6379端口。 - 配置文件中的bind和protected-mode:如果
bind设置的是127.0.0.1,从别的机器连肯定连不上,这是正常的。远程机器要连,改bind成内网IP再重启服务。 - 密码认证失败:看Redis日志,如果出现
NOAUTH Authentication required,说明需要密码,客户端没带或者带错了。用redis-cli -a <密码>重新连一次试试。
5.3 性能问题的快速定位
项目上线后Redis响应变慢,怎么快速定位哪里的问题?我的经验是这样:
先看服务器负载:
redis-cli --stat这个命令每秒输出一次当前连接数、内存占用、每秒命令数等信息,能直观看到是不是命令量太大压垮了Redis。
再看慢查询:
redis-cli slowlog get 10会列出最近10条执行时间超过阈值(默认10毫秒)的命令。看到明显有keys *这类全量扫描的,那就是代码写法的问题——线上环境禁止使用keys *,用scan代替。
最后看内存:
redis-cli -a 密码 info memory重点看used_memory_peak和maxmemory的关系,如果峰值一直贴着上限,说明内存不够,要么加内存,要么给Redis淘汰策略配置调整一下。
5.4 持久化配置的几个注意点
Redis做缓存用,持久化可以靠RDB快照;做数据库补充或消息队列用,得考虑AOF的配置。最基本的几个参数不要乱调:
save 900 1 save 300 10 save 60 10000这是默认的RDB快照策略:900秒内有1个key变化、300秒内有10个key变化、60秒内有1万个key变化就做一次快照。嫌快照太频繁导致磁盘压力大,把时间拉长或者把阈值调高。
开了AOF的话,把这个参数设置成everysec是日常最优解:
appendfsync everysec每条命令都同步磁盘太慢,每秒同步一次安全性也够用,性能和可靠性都能兼顾。
每次写dump.rdb或者AOF重写的时候Redis会fork子进程,如果服务器内存本来就紧张,fork可能触发内存交换,直接把Redis拖到无法响应。这里就要保证服务器有足够的物理内存,或者设置maxmemory让Redis有边界感。
6. 我个人的实操总结
如果你问我,装Redis这件事上踩过最大的坑是什么?我会说:装完就当成功,忽略了服务管理和安全配置。Windows下直接双击redis-server.exe的,Linux下装完用redis-cli ping通了就觉得完事儿的,等到服务器重启之后发现服务没起来、被人扫到端口入侵了才后悔没早做那十几分钟配置。
所以我的建议从来都是——装Redis的步骤固然重要,但装上之后那几步系统化和安全化的操作才是一个“能用”和“好用”的Redis的分水岭。
最后再分享一个每天省时间的小技巧:在命令行里给redis-cli配个别名,带密码带端口,用起来飞快。
# Linux bashrc或zshrc里加一行 alias rcli='redis-cli -a your-password -p 6379'Windows下就写一个rcli.bat批处理放到PATH目录里:
@echo off redis-cli -a your-password -p 6379 %*连客户端命令都配置好了,这套装法从Windows到Linux,从开发机到服务器,一路跑下来基本不会再遇到与Redis安装运维相关的坑了。遇到问题别慌,端口、配置、防火墙、日志,按顺序查,百分之八九十的问题都能在十分钟内定位。