news 2026/9/17 3:50:55

CentOS 8上Redis从编译安装到彻底卸载:踩坑总结与完整操作指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
CentOS 8上Redis从编译安装到彻底卸载:踩坑总结与完整操作指南

CentOS 8装Redis,按理说是特别基础的活儿。但我在公司帮同事处理过好几回Redis环境问题,发现真正折腾人的根本不是安装本身,而是yum源失效、编译版本选错、卸载不干净、卸完端口还被残留进程占着这一连串破事。今天这篇文章就专门把CentOS 8上Redis从安装到卸载的完整链路讲清楚,从环境准备、编译安装、基础配置,再到彻底卸载和残留清理,最后附一份常见问题的排查速查表。无论你是刚接触Linux的新手,还是需要频繁搭建回收Redis环境的运维,照着做基本不会走弯路。

1. 装之前先把这几件事想明白

1.1 CentOS 8的yum源问题,绕不开

很多人拿到一台CentOS 8服务器,第一反应就是yum install redis。如果你现在还能一把装成功,恭喜你,你的yum源配置要么是已经切到了镜像源,要么是运气好。多数情况下,CentOS 8默认的mirrorlist.centos.org地址已经无法访问了,直接导致yum install报错,提示Cannot find a valid baseurl for repo: base或者Could not resolve host: mirrorlist.centos.org

这不是你网络的问题,是CentOS 8官方仓库停止维护带来的连锁反应。默认的repo文件里那些域名解析不到,yum自然找不到软件包。解决办法不复杂,把软件源切换到可用的镜像地址就行。我习惯用阿里云的vault源,操作步骤如下:

# 先备份原有repo配置 mkdir -p /etc/yum.repos.d/backup mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/backup/ # 下载阿里云的CentOS 8 vault仓库配置 curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo # 清理并重建缓存 yum clean all yum makecache

执行完这几条命令,再yum install就有反应了。注意这里用的是8.5.2111这个vault版本,这是阿里云专门为停止维护的CentOS 8保留的历史仓库。这个操作做完,你要做的第一件事就是装基础编译工具,这会在后面反复用到。

1.2 安装方式选哪个:yum装还是编译装

yum源恢复之后,安装Redis有两条路:

对比项yum安装编译安装
上手速度快,一条命令装完慢,需要编译等待
版本控制依赖源内版本,通常偏旧可从官网选择任意稳定版
安装路径分散在/usr/bin、/etc、/var等目录可统一指定到某个目录
卸载方便度yum remove即可,但有残留风险直接删除目录即可,但要手动清理服务文件
生产环境适用性适合快速测试适合生产,可控性强

我个人的习惯是生产环境一律编译安装。原因有三个:一是版本可控,能用上官方最新的稳定版(比如7.0.x或6.2.x),而不是仓库里那个老旧的默认版本;二是安装目录统一,方便日后的维护和备份;三是卸载时逻辑清晰,把整个目录删掉再加上手动清理几个文件,比yum残留的处理干净得多。

如果你只想临时起个Redis实例跑跑demo,那yum装也行。但既然文章讲的是“安装+卸载”,我下面重点讲编译安装的完整流程,同时把yum方式一并带过。

2. 编译安装Redis的完整实操

2.1 先把编译环境补齐

编译Redis需要gcc和make,CentOS 8默认不一定装了完整的编译工具链。先执行这条命令:

yum install -y gcc make tar wget tcl

这里我把tarwget也一起装了,一个是解压源码包必备,一个是下载源码包要用。tcl是为了后面可选执行make test时准备,redis源码自带测试套件,如果你不想跑测试,不装tcl也不影响编译和安装。

装完gcc之后验证一下版本,确保编译环境正常:

gcc --version

CentOS 8自带的gcc是8.x版本,编译Redis 7.x完全没有问题,不用担心版本过老。

2.2 下载源码:版本怎么选

源码包去哪下?首选官方地址download.redis.io。如果你所在网络访问官方比较慢,也可以用国内镜像加速下载。

版本选择上,目前(2025年)Redis 7.0.x和6.2.x都是非常成熟稳定的选择。Redis 7引入了不少性能优化和新特性,正常业务完全可以用。我一般选7.0系列的最新小版本,比如redis-7.0.15.tar.gz

cd /opt wget https://download.redis.io/releases/redis-7.0.15.tar.gz tar xzf redis-7.0.15.tar.gz cd redis-7.0.15

下载完成之后先别急着编译,看一下目录里的README.mdredis.conf文件,里面有很多官方说明。这一步虽然不起眼,但对于想深入理解Redis配置的人来说,比网上任何教程都权威。

2.3 编译和安装:PREFIX参数别忽略

进入源码目录后,依次执行:

make make install PREFIX=/usr/local/redis

这里有一个关键点:PREFIX参数指定了Redis的安装根目录。加了这个参数,编译产出的可执行文件会被安装到/usr/local/redis/bin目录下,而不去污染/usr/local/bin/usr/bin

为什么不加PREFIX就默认装到/usr/local/bin?加上PREFIX有什么好处?统一目录管理对我来说价值很大——升级版本时直接换目录,出问题时整个目录打包备份,卸载时一条rm -rf就能把所有二进制清光,不用到处找散了满系统的文件。

编译过程中如果一切顺利,最后看到Hint: It's a good idea to run 'make test'的提示就说明编译完成了。make test可以跑一遍官方测试用例确认Redis功能正常,但耗时较长,生产环境时间紧迫时可以不跑。我一般只做一次,确认当前版本没问题。

2.4 安装目录规划与基础验证

安装完成后,Redis的可执行文件在/usr/local/redis/bin下。为了后续配置清晰,我习惯手动创建配置目录和数据目录,把整个Redis运行所需的所有文件集中管理:

mkdir -p /usr/local/redis/etc mkdir -p /usr/local/redis/data mkdir -p /usr/local/redis/logs # 把默认配置文件复制到指定配置目录 cp /opt/redis-7.0.15/redis.conf /usr/local/redis/etc/

这样最终的目录结构是:

/usr/local/redis/ ├── bin/ # redis-server、redis-cli、redis-benchmark等可执行文件 ├── etc/ # redis.conf配置文件 ├── data/ # RDB和AOF持久化文件 └── logs/ # 运行日志

然后验证一下版本号,确认安装到位:

/usr/local/redis/bin/redis-server --version

会输出类似Redis server v=7.0.15 sha=00000000:0 malloc=jemalloc-...的信息。到这里,二进制层面的安装就算完成了,但真正的“配置调优”才刚刚开始。

3. 启动配置与基础使用

3.1 redis.conf里最应该改的5个配置

Redis默认配置能跑起来,但直接扔到生产环境绝对不行。下面这几个配置项,每次新装Redis我都会逐个过一遍:

第一,daemonize。默认是daemonize no,也就是Redis以前台方式运行,你一关终端它就停了。改成daemonize yes可以让Redis在后台以守护进程方式运行。

第二,requirepass。这是Redis的访问密码。默认是注释状态,意味着无密码访问,任何人只要能连上你的6379端口就能操作所有数据。这个必须要改,我建议用一个强密码,类似MyRedis@2025#Secure这种级别。生产环境我见过太多Redis因为裸奔被入侵的案例,这个配置项是最简单但最关键的一道防线。

第三,bind。默认绑定127.0.0.1,只允许本机访问。如果Redis和应用部署在同一台机器,保持默认就好。如果需要远程访问,改成内网IP,比如bind 192.168.1.100,不要图省事直接bind 0.0.0.0,这等于把Redis完全暴露在网络上。

第四,port。默认6379,一般不用改,但要确认这个端口没有被其他服务占用。如果你要跑多个Redis实例,可以分别设置6380、6381等不同端口。

第五,dir、logfile和pidfile。这三个分别指定数据持久化目录、日志文件和进程PID文件的存放位置。建议改用我们上面创建的目录:

dir /usr/local/redis/data logfile /usr/local/redis/logs/redis.log pidfile /var/run/redis_6379.pid

修改配置时我有个习惯,每改一个配置项就在旁边用#注释写明改动原因,方便日后排查。这个习惯在团队协作时特别有用,新同事接手时一眼就能看懂前人改过什么。

3.2 用systemd管理Redis实现开机自启

daemonize yes只是让Redis在后台运行,但如果服务器重启,Redis不会自动启动。正规做法是写一个systemd服务文件,用systemd来管理Redis的生命周期。

创建/etc/systemd/system/redis.service,内容如下:

[Unit] Description=Redis persistent key-value database After=network.target [Service] ExecStart=/usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf ExecStop=/usr/local/redis/bin/redis-cli -h 127.0.0.1 -p 6379 shutdown Restart=always User=redis Group=redis [Install] WantedBy=multi-user.target

这里我把UserGroup设置成了redis,所以需要先创建一个专用系统用户:

useradd -r -s /sbin/nologin redis chown -R redis:redis /usr/local/redis

用专用用户而不是root运行Redis,是安全上的基本要求。即使Redis被攻击者利用,也拿不到root权限。

然后重载服务配置并启动:

systemctl daemon-reload systemctl start redis systemctl enable redis systemctl status redis

看到active (running)就说明服务已经正常运行了。注意ExecStop这里执行的redis-cli shutdown,如果配置了requirepass密码,shutdown时需要加-a 你的密码参数才能通过认证,否则会提示无权限。不过把明文密码写进service文件会有点安全隐患,我自己的做法是只设置密码允许本机shutdown,这样配合-a使用风险可控。

3.3 redis-cli验证安装是否成功

服务起来之后,马上用redis-cli做一轮基础验证,确认读写正常:

# 本机无密码测试 /usr/local/redis/bin/redis-cli ping # 设置了密码后需要带密码操作 /usr/local/redis/bin/redis-cli -a 'MyRedis@2025#Secure' ping # 基础读写验证 /usr/local/redis/bin/redis-cli -a 'MyRedis@2025#Secure' set mykey hello /usr/local/redis/bin/redis-cli -a 'MyRedis@2025#Secure' get mykey # 查看服务信息 /usr/local/redis/bin/redis-cli -a 'MyRedis@2025#Secure' info server

PING命令返回PONG说明服务正常,SETGET验证了基本读写链路。每次新装Redis后我必跑这几条命令,30秒就能确认安装没问题,比看日志高效得多。

4. 卸载Redis,干净利落不残留

4.1 不同安装方式的卸载差异

很多同学以为卸载就是yum remove redis或者把安装目录删了,结果过几天发现6379端口还在被占用,或者redis-server进程还在跑,一脸懵。这就是卸载不彻底的典型表现。

yum remove redis能卸载rpm包装进去的文件,但yum装完Redis后,配置文件、持久化数据文件可能散落在/etc/redis.conf/var/lib/redis/var/log/redis等位置,yum remove不一定全部清除。编译安装的方式则需要手动清理,但逻辑上更清晰——你在哪里装的就从哪里删。

4.2 编译安装的彻底清理流程

编译安装的Redis,我把清理步骤总结成以下几步:

# 1. 停止服务并取消开机自启 systemctl stop redis systemctl disable redis # 2. 删除systemd服务文件 rm -f /etc/systemd/system/redis.service systemctl daemon-reload # 3. 删除安装主目录 rm -rf /usr/local/redis # 4. 删除数据目录(如果数据不保留的话) rm -rf /usr/local/redis/data rm -rf /usr/local/redis/logs # 5. 删除Redis专用系统用户 userdel redis # 6. 清理源码目录 rm -rf /opt/redis-7.0.15 rm -f /opt/redis-7.0.15.tar.gz

这套流程下来,二进制文件、配置、日志、数据、服务文件、用户,全都没了。但等一下,还有几个地方容易被遗漏。

第一,残留进程检查。如果你之前没有通过systemctl stop redis优雅停服,而是直接kill -9,Redis进程可能变成僵尸状态或者重新拉起。卸载前必须确认进程真的没了:

ps -ef | grep redis ss -lntp | grep 6379

如果还有进程在跑,先kill掉:

pkill -9 redis-server

第二,/var/run下的PID文件。如果之前配置了pidfile /var/run/redis_6379.pid,服务停止时PID文件会保留,需要手动清理:

rm -f /var/run/redis_6379.pid

第三,环境变量和PATH。如果你之前把Redis的bin目录加到了/etc/profile或者~/.bashrc里,卸载后要手动删除相关行。否则以后执行redis-cli还是会报命令找不到,误导排查方向。

4.3 快速确认卸载干净的“三看”原则

卸载完怎么判断真的干净了?我总结了三个检查维度,简称“三看”:

第一,看进程——执行ps -ef | grep redis,没有任何输出即正常。

第二,看端口——执行ss -lntp | grep 6379,没有监听即正常。这里要注意,如果端口还有监听,可能是其他程序占用了,需要进一步确认,不要想当然认为是Redis残留。

第三,看文件——执行find /usr/local -name '*redis*' 2>/dev/nullfind /etc -name '*redis*' 2>/dev/null,没有输出即正常。这一步能帮你发现遗漏的配置文件和日志残留。

“三看”全过,卸载才算真正完成。这套检查方式我每回都用,一次都没出过错。

5. 安装卸载过程常见问题速查

问题现象可能原因解决办法
yum install报错Cannot find a valid baseurlCentOS 8源失效切换vault源,参考1.1节
make时报gcc: command not found未安装编译工具链yum install -y gcc make
make test报错You need tcl 8.5 or newer缺少tcl依赖yum install -y tcl
Redis启动后日志有Memory overcommit must be enabled告警系统内存过度分配未开启echo 'vm.overcommit_memory = 1' >> /etc/sysctl.conf && sysctl vm.overcommit_memory=1
远程访问Redis被拒绝bind限制、protected-mode或防火墙未放行改bind为内网IP;确认防火墙3306/6379端口放行;确认要求的密码配置正确
systemctl start redis失败配置文件路径错误或目录权限不对journalctl -u redis查看具体报错,确认目录归属redis用户
卸载后6379端口仍被监听残留进程未清干净`ss -lntp
Redis连接报NOAUTH Authentication required设置了密码但未带密码访问redis-cli -a 密码操作,或先auth 密码

表格之外再说一个我踩过很深的坑。有次我在一台测试机上卸载旧版Redis,装了新版本,结果启动后redis-cli ping始终报错,查了十分钟才发现是旧版本的残留进程还占着6379端口,新进程根本起不来。当时systemctl status redis显示的是新服务的状态,但实际监听端口的还是旧进程——这种“假启动”最坑人。所以每次启动前先看一下ss -lntp | grep 6379,确认端口空闲或者当前监听者就是自己,能省下大量排查时间。

另外还有一个隐藏问题:Redis启动时如果dir指定的数据目录不存在,redis-server会直接启动失败,但错误日志不会特别显眼。所以配置里一旦改了dir路径,务必先mkdir -p创建好目录,再启动服务。

最后处理vm.overcommit_memory告警时,注意sysctl配置要写入/etc/sysctl.conf持久化,否则重启之后告警又回来了。Redis在RDB持久化fork子进程时对内存分配策略比较敏感,弄不好会触发数据丢失,这个配置千万别省略。

6. Redis装好之后,还能干点什么

安装和卸载整明白了,Redis的作用才刚开始显现。这里简单聊聊几个我经常遇到的扩展使用方向。

6.1 持久化配置:RDB和AOF

Redis虽然叫内存数据库,但数据安全性也很重要。我建议至少开启RDB快照做常规备份,AOF做更细粒度的持久化,两者可以同时开启。配置里主要关注:

save 900 1 save 300 10 save 60 10000 appendonly yes appendfilename "appendonly.aof" appendfsync everysec

第一次配置持久化的时候,可以在给自己测过的环境里通过网络压测确认一下fsync策略对吞吐量的影响,always最安全但性能下降明显,everysec是兼顾性能和安全的常用选择。

6.2 远程管理工具:Redis Desktop Manager

很多同学装完Redis之后习惯用图形化工具查看数据。Redis Desktop Manager(RDM)是目前使用率比较高的一个客户端,支持String、Hash、List、Set、ZSet这些数据类型的可视化管理。连接远程Redis时,建议先通过SSH隧道方式连接,而不是把6379端口直接暴露到公网。这里也是一些安全风险的高发地,切勿图方便裸奔。

6.3 进阶方向:主从复制、哨兵、集群

装好单机Redis之后,手痒的话可以搭建主从复制练手。配置也简单,在从节点的redis.conf里加上:

replicaof 主节点IP 6379

然后启动从节点即可自动同步主节点数据。再往上就是哨兵模式实现自动故障切换,以及Redis Cluster横向扩展。这些我后面可能会单独写文章详细讲。另外注意一点,不管搭哪种架构,密码策略和网络隔离都是第一时间要考虑的事。

Redis系列数据结构里,String最基本,Hash适合存对象,List适合做消息队列,Set适合做去重和标签,ZSet适合做排行榜。你们可以根据业务场景去用,但切记:不要在配置文件和数据文件上偷懒,该备份的备份,该设密的设密。

拿我自己来说,每次装完Redis,第一件做的事是备份一份redis.conf到本地,第二件是把密码记到团队密码管理器里,第三件是确认systemctl enable redis已经生效。这三步做完,才算真正下班。装Redis不难,难的是装完之后别给环境留下隐患。希望今天这些流程和坑,能让你们少走几步弯路。

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

【 ‌infrastructure】第一篇 大型互联网基础设施知识体系02

一、大禹AI柜 AC-DC PSU 基线(公开事实) 母线:48V 直流(ORV3 对照运行区约 47.5–50.5V,47.5V 可作 BBU/备电触发参考) 输入:整机柜 PowerShelf 接 AC 配电;具体单相/三相、相数按 Shelf 型号定。ORV3 1OU Shelf 可配 3φ Delta/Wye 或 3单相 冗余:N+M,模组数量可扩展…

作者头像 李华
网站建设 2026/9/17 3:50:16

【 ‌infrastructure】第二篇 云数据中心基础设施中的基础知识01

编号 一级类型 二级类型 学科 学科中的知识列表(含有软件、算法与硬件设备工程融合) 知识工程和知识建模方法 在工业界/企业界/产业界的实践和研究 关联知识和规定和标准 1 计算资源与架构 Scaling 理论 计算机体系结构、分布式系统、数学物理、复杂科学 Amdahl定…

作者头像 李华
网站建设 2026/9/17 3:49:32

昇腾950DT深度解析:达芬奇架构、算子开发与性能调优实战

最近在折腾华为昇腾平台,手头刚好拿到一块昇腾 950DT 加速卡,趁着项目调优的空档,把这段时间对这块卡的架构理解和踩坑经验整理出来。昇腾 950DT 这个名字在圈子里流传有一阵了,但真正公开的资料其实并不多,大部分信息…

作者头像 李华
网站建设 2026/9/17 3:47:10

FG001: Short Title

FG001: Short Title 【免费下载链接】slang Making it easier to work with shaders 项目地址: https://gitcode.com/GitHub_Trending/sl/slang Status: ProposedConfidence: High | Medium | LowScope: Direct | Contextual | Probably out-of-scopeCategory: type con…

作者头像 李华
网站建设 2026/9/17 3:45:56

PHP接入DeepSeek R1满血版实战:API调用与Function Calling

简介:面向PHP开发者的DeepSeek R1满血版大模型接入DEMO,重点解决在PHP项目中对接大模型接口、缺少可直接运行的参考代码、界面展示不直观等常见问题,适合有一定PHP基础、正在做AI功能集成或毕业设计项目的开发者。该示例采用仿微信聊天PC端界…

作者头像 李华