news 2026/10/12 6:51:58

CentOS 8 Redis安装配置与卸载清理实操指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
CentOS 8 Redis安装配置与卸载清理实操指南

说实话,CentOS 8 上装 Redis 这事儿,看着简单,但这两年坑是真不少。系统源里自带的版本偏老、模块流切换搞不明白、装完忘记配密码被扫描器盯上,卸载的时候又因为残留文件导致重装后数据错乱——这些场面我见过太多次了。这篇文章就专门讲清楚两件事:CentOS 8 上怎么把 Redis 装好、配好、跑起来,以及不需要的时候怎么把它卸得干干净净,不留后患。

内容偏实操,适合刚接触 Linux 运维的开发者,也适合那些已经在用但没系统整理过安装卸载流程的同行。我尽量把每一步的“为什么这么做”也讲清楚,而不是单纯丢给你一串命令。

1. 装之前先看清环境与版本选择

1.1 检查系统版本和已有残留

不管你是新机器还是旧机器,动手之前先花两分钟确认环境。我见过太多人上来就敲安装命令,结果要么版本不对,要么机器上早就装过 Redis,端口冲突直接启动失败。

先看系统版本:

cat /etc/redhat-release

如果是 CentOS 8.x 就没问题。接着检查是否已经装过 Redis:

redis-server --version rpm -qa | grep redis

如果命令不存在,说明没装过;如果命令存在,说明之前装过,继续操作前得先决定是复用还是清除重来。再看一下端口占用情况:

ss -lntp | grep 6379

Redis 默认监听 6379,如果这个端口已经被占用,可能是老的 Redis 实例还在跑,也可能是别的程序占用了。端口被占时强行装新版,大概率启动报错,白白浪费时间排查。

1.2 Redis 版本选型:系统源还是源码编译

在 CentOS 8 上装 Redis,主流路线就两条:一条是用系统自带的 dnf 包管理器直接装,另一条是下载源码自己编译安装。两条路我都走过,各有适用场景。

系统源安装的好处是省事,命令少,而且由系统的包管理器统一管理,以后卸载、升级都方便。但缺点也很明显:源里的 Redis 版本通常偏旧。CentOS 8 的 AppStream 源里默认提供 Redis 5,虽然可以通过模块流切换版本,但即便切到高版本,往往也比官方最新版落后不少。

源码编译安装的好处是版本任选,官方发布新版本后你随时能编译部署,还可以根据自己的需求加编译参数。缺点是步骤多、耗时长,而且要自己写 systemd 服务管理文件,对新手不太友好。

我的建议是:如果是测试环境、学习用,优先走系统源安装,快、干净、好卸载。如果是生产环境且对 Redis 版本有明确要求(比如需要 7.x 的新特性),那直接上源码编译,别在旧版本上纠结。

1.3 CentOS 8 镜像源失效问题处理

这里必须单独提一句,因为这是 CentOS 8 特有的坑。CentOS 8 的生命周期结束后,官方源迁移到了归档仓库,如果你装的是早期的 CentOS 8.x 且没有调整过 yum 源,直接执行 dnf 命令往往会报错,提示找不到镜像或者下载元数据失败。

解决办法是切换 vault 源或者国内常见的开源镜像站点提供的 CentOS 8 归档源。操作思路都类似:备份原来的 CentOS-Base.repo,替换成新源地址,然后清缓存重建:

dnf clean all rm -rf /var/cache/dnf dnf makecache

如果你不清楚具体配置怎么写,最简单的做法是确认系统当前使用的仓库文件路径(一般是 /etc/yum.repos.d/ 下的 .repo 文件),把它替换成对应镜像站点的归档源配置。这一步不处理好,后面所有 dnf 操作都会卡壳。

2. dnf 安装 Redis 的完整流程

2.1 启用模块流安装指定版本

CentOS 8 的 AppStream 仓库把 Redis 做成了模块流的形式,你可以用 dnf module 命令查看可用的流:

dnf module list redis

输出结果里会列出不同的 Redis 版本流,比如 5、6,以及当前默认启用的版本。如果你想装默认版本,直接执行:

dnf install redis -y

如果你想指定版本,先启用对应的模块流再安装。比如要装 Redis 6:

dnf module enable redis:6 -y dnf install redis -y

模块流切换这个操作其实不复杂,但很多人不知道。默认版本的 Redis 是跟着系统走的,不指定的话装出来往往是老版本。如果你对版本没执念,默认版本完全够用;如果强迫症发作想要新特性,记得先 enable 再 install。

安装完成后验证一下:

redis-server --version

能正常输出版本号,说明核心程序已经就位。

2.2 启动服务与 systemd 托管

CentOS 8 上通过 dnf 安装的 Redis 会自动生成 systemd 服务文件,你不用自己写,直接开起来就行:

systemctl start redis systemctl enable redis

enable 这一步很关键,它把 Redis 设置为开机自启。很多人装完忘了这步,服务器重启后 Redis 没起来,业务直接断连,排查一圈才发现是没设开机自启。

启动后看状态:

systemctl status redis

状态显示 active (running) 就说明已经跑起来了。如果状态异常,先看日志:

journalctl -u redis -n 50 --no-pager

日志会告诉你启动失败的具体原因。最常见的几个原因后面专门写一节。

2.3 安全配置:bind、密码、保护模式

服务跑起来只是第一步,不把安全配置做了就等于把 Redis 裸奔在网络上。Redis 默认配置有几个安全弱点:只绑定了 127.0.0.1,但如果你改了 bind;或者保护模式没管好;又或者没有设密码,这些都是被入侵的入口。

修改配置文件 /etc/redis.conf,重点看这几项:

bind 127.0.0.1 protected-mode yes requirepass 你的强密码 daemonize no

bind 指定监听地址,默认 127.0.0.1 表示只允许本机访问。如果你需要远程连接,可以改成内网 IP,但绝不要直接设成 0.0.0.0,除非你密码够复杂且防火墙做了严格限制。

protected-mode 是保护模式,开启后如果 Redis 没有密码且没有绑定内网 IP,它会拒绝外部访问,相当于兜底防线,建议保持 yes。

requirepass 就是设置访问密码。这一项强烈建议设置,哪怕是测试环境。因为互联网上有大量扫描器在扫 6379 端口,一旦发现没密码的 Redis,轻则被写入恶意定时任务,重则直接拿你的机器挖矿。

改完配置后重启服务生效:

systemctl restart redis

然后用密码登录测试:

redis-cli -a '你的强密码' ping

返回 PONG 就说明密码设置成功,服务正常工作。

提示:redis-cli 后面直接跟密码执行命令,会留下命令历史记录。生产环境建议进入交互模式后先用 auth 命令认证,或者临时设置 HISTFILE 指向空设备,减少密码泄露风险。

3. 源码编译安装 Redis 的完整流程

3.1 下载源码包与依赖准备

源码编译最大的优势是版本自由。以官方最新稳定版为例,你只需要去官网找到源码包的下载地址,然后 wget 下来解压就行。这一步的关键在于编译依赖要先装齐,否则 configure 阶段就报错。

安装编译工具链:

dnf install -y gcc make tar wget

有些老版本 Redis 还需要 tcl 来跑测试用例,如果你不打算执行 make test,可以不装。编译工具是必须的,我遇到过不少人卡在这一步 — 明明下载了源码,执行 make 却提示 cc 命令找不到,其实就是没装 gcc。

下载源码包并解压:

wget https://download.redis.io/releases/redis-7.x.x.tar.gz tar xzf redis-7.x.x.tar.gz cd redis-7.x.x

具体版本号以自己的实际需要为准,7.x 是目前的主流系列,稳定性和新特性都兼顾。

3.2 编译安装要点

进到源码目录后,老版本可能需要先执行 make distclean 清理旧编译产物,新版本直接从 make 开始就行:

make -j4

-j4 是启用 4 个并行编译任务,机器核数多的话编译速度会快不少。编译过程出错的话,百分之九十是缺依赖,回到上一步补齐再重来。

编译完成得到的是二进制文件,此时可以手动复制到系统目录,但更省事的做法是直接用 make install:

make install

默认会安装到 /usr/local/bin/ 下。安装成功后同样验证版本:

redis-server --version

3.3 配置 systemd 服务单元

源码安装和 dnf 安装最大的区别就在这里:系统源安装会自动生成 systemd 配置,源码安装得自己写。不写服务文件也能手动启动,但就没法用 systemctl 管理开机自启,这在生产环境是不能接受的。

先复制官方提供的配置文件到标准位置:

mkdir -p /etc/redis cp redis.conf /etc/redis/redis.conf

然后创建 systemd 服务文件 /etc/systemd/system/redis.service,内容思路如下:

[Unit] Description=Redis Server After=network.target [Service] ExecStart=/usr/local/bin/redis-server /etc/redis/redis.conf ExecStop=/usr/local/bin/redis-cli shutdown Restart=always User=root Group=root PIDFile=/var/run/redis.pid [Install] WantedBy=multi-user.target

注意 ExecStart 里的路径要和你实际安装位置一致,如果你的 redis-server 不在 /usr/local/bin/,改成对应路径。写完后加载并启动:

systemctl daemon-reload systemctl start redis systemctl enable redis

到这里,源码安装的服务也能像 dnf 安装一样用 systemctl 管理了。配置文件的修改方式和前面讲的完全一样,bind、密码、保护模式这些照样得设置,别因为是自己编译的就跳过安全配置。

4. 卸载 Redis:停服、删除、清理残留

4.1 备份数据与停服

卸载之前,最重要的不是执行删除命令,而是确认你的数据有没有备份需求。Redis 的数据都保存在内存里,持久化有两种方式:RDB 快照和 AOF 日志。配置文件里分别对应 dbfilename 和 appendfilename 设置。

查看当前持久化文件:

redis-cli -a '你的强密码' info persistence ls -lh /var/lib/redis/

如果你确定这些数据都不需要了,那直接往下走。如果有需要保留的数据,先把目录下的 .rdb 和 .aof 文件复制走,或者用 redis-cli 做一次 BGSAVE 强制生成最新快照后再备份。

备份完成后停服务。不要直接 kill 进程,要走正常关闭流程:

systemctl stop redis

或者通过客户端命令优雅关闭:

redis-cli -a '你的强密码' shutdown

优雅关闭会触发持久化,把内存中的数据写回磁盘,避免直接 kill 导致数据丢失。systemctl stop 实际也会走这一步,但二者选一个就行,不要重复执行。

4.2 卸载软件包

停服之后才是真正的卸载环节。如果你是 dnf 方式安装的,执行:

dnf remove redis -y

它会自动删除 Redis 相关软件包。卸载过程中如果提示有依赖问题,加上 --setopt=clean_requirements_on_remove=1 再试。

如果你是源码编译安装的,情况不太一样:源码包本身没有注册到 dnf 的包管理数据库里,dnf remove 找不到它。正确做法是手动删除二进制文件:

rm -f /usr/local/bin/redis-server rm -f /usr/local/bin/redis-cli rm -f /usr/local/bin/redis-benchmark rm -f /usr/local/bin/redis-check-aof rm -f /usr/local/bin/redis-check-rdb rm -f /usr/local/bin/redis-sentinel

同时删掉自己创建的服务文件:

rm -f /etc/systemd/system/redis.service systemctl daemon-reload

这一步要特别注意,源码安装删除二进制文件后,systemd 的服务配置还残留着,如果你不删服务文件,systemctl status redis 会一直显示异常状态,虽然实际上服务已经不存在了。

4.3 清理残留文件与痕迹

卸载命令只是把软件包删了,残留文件才是重装时出问题的根源。我在实际工作中遇到过多次这种情况:客户说“我已经卸载了 Redis”,结果重装时端口冲突,查了半天才发现老配置文件还在,服务还在跑。

需要清理的残留位置主要有这几个:

位置说明
/etc/redis/ 或 /etc/redis.conf主配置文件
/var/lib/redis/持久化数据文件(RDB/AOF)
/var/log/redis/运行日志
/var/run/redis.pidPID 文件
/tmp/ 下相关临时文件临时转储文件

逐项清理:

rm -rf /etc/redis /etc/redis.conf rm -rf /var/lib/redis rm -rf /var/log/redis rm -f /var/run/redis.pid

如果卸载前没有停服,Redis 进程还会占着端口。检查一下:

ss -lntp | grep 6379

如果有残留进程,用 systemctl stop redis 或 redis-cli shutdown 停掉,杀干净进程再删除文件。

最后确认一下 Redis 相关用户和用户组是否要保留。一般情况下不用特意清理,但强迫症可以查一下:

id redis

如果确认不需要这个用户,可以一并删除,但不是必须。

注意:清理持久化文件前一定要确认数据不再需要。RDB 和 AOF 文件删了无法恢复,这点务必要有备份意识。

5. 常见问题与排查实录

5.1 dnf 安装时找不到 redis 包

这个问题出现频率极高,尤其是 CentOS 8 环境。执行 dnf install redis 提示没有匹配的包,多半是模块流或者仓库源的问题。

排查思路三步走:

dnf module list redis dnf repolist dnf makecache

如果 module list 输出为空,说明 AppStream 仓库没启用或者源有问题,回到第一节讲的镜像源处理。如果仓库正常但 still 提示找不到,试试直接指定模块:

dnf module install redis:6

有时候默认模块流没有启用,直接指定版本流反而能装上。

5.2 启动失败:PID 文件或权限问题

启动 Redis 时报错日志里出现 Permission denied 或者 Address already in use,通常有两种情况。

第一种是 /var/lib/redis 目录权限不对。Redis 进程需要对该目录有读写权限,否则持久化失败。解决办法:

chown -R redis:redis /var/lib/redis chmod 700 /var/lib/redis

第二种是端口被占用。用 ss -lntp | grep 6379 查看占用进程,如果确认是残留的 Redis 进程,先停掉再启动新的。

还有一种比较少见的:Redis 6 及以上版本启动时会检查 maxmemory、protected-mode 等配置项,如果你的配置文件里写了过时的参数,启动会直接报错并拒绝运行。处理办法是把配置文件里旧的参数项注释或删除,保留 Redis 当前版本支持的配置。

5.3 卸载后重装出现数据冲突

这个问题几乎都是残留文件引起的。有人卸载前没有清理 /var/lib/redis 目录,重装后发现“新装”的 Redis 里居然有旧数据,吓了一跳,以为是版本升级自动迁移了,实际上就是 RDB 文件没删干净。

更隐蔽的是配置文件残留。dnf remove 通常不会删除 /etc/redis.conf,重装后你改的不是新配置而是旧配置,一些诡异的行为让人摸不着头脑。我的一般做法是:卸载后把这些目录整体删掉,再装的时候就当它是一台干净机器,所有配置从零开始。

5.4 redis-cli 连接超时

装好 Redis 后,用 redis-cli ping 一直卡住或提示超时。优先检查 bind 配置和 protected-mode,如果 bind 只写了 127.0.0.1,而你在另一台机器上执行 redis-cli 连接,那必然超时。本地连接也超时的,检查防火墙是否拦截了回环地址的流量,虽然极少见,但我确实遇到过本机防火墙策略把 6379 入站过滤的情况。

还有一种情况是 Redis 服务根本没起来,systemctl status redis 显示 failed。这种情况看日志定位问题最直接:

journalctl -u redis -n 100 --no-pager

日志里如果有 key 的报错信息,基本就是配置文件哪一项写错了,对照报错行去改配置文件就行。

6. 一些个人实操体会

最后分享几个实际经验,都是我踩过坑之后总结的习惯。

第一,无论生产还是测试,装 Redis 第一件事就是设密码。Redis 的默认配置在保护模式下还好,但一旦你为了远程访问改了 bind,密码就是唯一防线。我见过不止一次没设密码的 Redis 被扫描器命中,机器被拿去挖矿,最后只能重装系统。

第二,卸载操作前养成先备份后审查的习惯。哪怕心里已经决定“数据都不要了”,也花几秒钟看一眼 /var/lib/redis 下的文件大小。有时候看似没用的数据,实际上是你同事在用的测试缓存,删了再解释成本就高了。

第三,源码编译安装容易让人忽视服务文件的维护。dnf 装的 Redis 卸载后服务文件清理是自动完成的,源码装的就得手动删干净。所以但凡能用 dnf 解决的环境,我建议优先用 dnf,省心很多。真的有版本强需求再走源码编译,但一定要把服务文件所在的目录记清楚,卸载时别漏掉。

第四,遇到问题先看日志,不要反复重装。很多人一遇到 Redis 启动失败就卸载重装,其实核心问题根本没解决,装完还是报错。systemd 的 journalctl 日志已经把原因写得清清楚楚,花三分钟看日志,往往比重装半小时高效得多。

这些经验算不上什么高深技巧,但确实是在一次次折腾里沉淀出来的。按这个流程操作,CentOS 8 上装 Redis、卸 Redis 都能少走不少弯路。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/12 6:51:24

权重开放时代:技术超越、政策博弈与商业重构实战指南

1. 从“权重开放”到“生态重构”的底层逻辑1.1 为什么开源权重突然成了兵家必争之地过去两年,模型开源这件事发生了质的变化。早期大家理解的“开源”,大多停留在开放推理接口、放出部分训练代码的层面,权重本身是锁在保险柜里的。但从某个时…

作者头像 李华
网站建设 2026/10/12 6:47:28

USACO Silver Milk Visits:树上路径存在性查询的并查集与LCA解法

如果你在准备 USACO Silver 组,2019 年 12 月的这道 Milk Visits 是绕不开的经典题。名字很温馨,农场、奶牛、牛奶,骨子里却是一道标准的树上路径查询问题:给你一棵 N 个节点的树,每个节点标记成 G 或 H,再…

作者头像 李华
网站建设 2026/10/12 6:45:48

ROS 2单兵开发实战:用代码大模型做数字CTO

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/12 6:45:45

汽车电子跨品类选型实战:高边开关、FPGA、ColdFire MCU与SiC FET对比

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/12 6:42:36

低轨卫星OFDM信号检测MATLAB仿真方法

简介:本资源是一份面向通信工程与信号处理方向研究生的低轨卫星OFDM通信链路信号检测方法研究开题报告,聚焦于解决低轨卫星动态信道下OFDM信号检测精度低、抗多普勒频移与多径干扰能力弱等关键技术难题。文档系统梳理了OFDM检测原理、低轨信道特性建模、…

作者头像 李华
网站建设 2026/10/12 6:42:02

8款AI论文工具实测:从选题到答辩的全流程应用与边界

一提AI论文工具,研究生的态度通常两极分化:有人把它当救命稻草,有人觉得它只会批量制造学术垃圾,还有更多人处于“偷偷用、又怕出事”的拧巴状态。2026届毕业季前后,我拿一篇模拟综述当测试对象,把目前能接…

作者头像 李华