资讯动态

CentOS 8上Redis安装与彻底卸载:从入门到清理实战

发布时间:2026/10/13 22:40:19 来源:尧图企业网站定制
1. 先搞清楚CentOS 8里装Redis到底该走哪条路标题看着只是安装 卸载四个字但我在CentOS 8上折腾Redis不止一次越往后越发现真正决定成败的不是那两条dnf install和yum remove命令而是装之前对从哪装、装哪个版本、配置文件怎么落位这几个问题有没有想清楚。先聊聊CentOS 8的软件仓库现状。CentOS 8的默认BaseOS源和AppStream源里是带Redis的但版本策略跟CentOS 7时代完全不同。CentOS 7的epel里Redis通常稳定在3.x、5.x而CentOS 8的AppStream通过模块流module stream来管理Redis版本你直接敲dnf install redis大概率装到的是模块流里默认启用的那个版本。如果不指定模块流不同小版本的CentOS 8.2、8.3、8.5拉到的Redis版本可能完全不一样有的直接给到5.0.x有的会给你6.0.x这就会带来一个隐性坑网上搜到的教程可能作者用的是6.x你本机装出来是5.x配置文件字段对不上照着抄也就跟着错。再说卸载。很多人以为卸载就是yum remove redis然后收工结果过几天发现/etc/redis.conf还在、/var/lib/redis目录还在、redis-server进程还能被手动拉起来甚至重新安装时发现端口被占用、数据目录里的旧RDB/AOF文件被自动加载程序行为跟预期完全不一致。这些问题我全踩过一遍所以这篇文章会把安装和卸载都当作有生命周期的完整过程来对待每一步都给出能直接复现的操作。适合看这篇文章的人我大体分成三类第一类是刚接触Linux服务器、打算在自己机器或云主机上跑一个Redis做缓存或队列的新手第二类是写代码但操作系统基本功不扎实、遇到装库和卸库总装不干净的后端开发者第三类是已经装过Redis但没搞明白卸载彻底性这件事需要一份完整清理清单的运维同学。无论你是哪类这篇文章都能当一份从零到清理完毕的参考手册来用。下面我把整个流程拆成四个部分来讲选型、安装与配置、彻底卸载、以及安装卸载过程中最常见的四个坎。2. 安装Redis的前置决策源、版本与SELinux状态2.1 三种安装途径的对比与选择理由在CentOS 8上装Redis通常有三条路用系统自带AppStream模块源直接装、用EPEL源装、用源码编译安装。每一路的适用场景差异很大我做了个对比表方便你对号入座安装途径典型版本优势劣势适合谁AppStream模块源5.0.x或6.0.x取决于模块流开关安装命令短依赖自动解决版本跟随系统生命周期升级不灵活快速起一个默认Redis测试或学习用EPEL源6.x或更高版本较新生态兼容性不错需要先安装epel-release多一步操作大多数生产服务器标准选择源码编译可自定义到最新稳定版可控性最强、能配置安装路径编译耗时长GCC依赖多升级维护麻烦对Redis内部实现有定制需求的场景如果你只是在本机搭个环境、跑通代码走AppStream模块源就够了。但我个人建议在CentOS 8上用EPEL理由有两点一是EPEL仓库里Redis版本通常比系统AppStream的默认模块流迭代更快不需要手动切module流二是EPEL对依赖处理更稳比如某些CentOS 8的BaseOS源网络源配置不完整时AppStream模块拉依赖容易报错EPEL反而不太会。当然如果你是追求极致稳定、不想引入第三方源的生产环境用系统源也完全没问题这只是选型取舍。2.2 不要忽略SELinux和防火墙这两个平路陷阱CentOS 8默认开启SELinux安装Redis本身不触发SELinux但Redis的网络监听和端口绑定行为会受它影响。很多教程装完Redis后直接在redis.conf里把bind 127.0.0.1改成0.0.0.0然后重启服务发现远程死活连不上查了半天不是密码问题也不是防火墙问题最后是SELinux拦截了Redis对外监听。这个坑我建议你在安装前就规避掉省得后面绕大圈。规避的方式分两种一是提前为Redis放行6379端口对应的SELinux布尔值二是直接确认SELinux当前状态。实操命令如下# 查看SELinux当前状态 getenforce # 如果是Enforcing建议为Redis打开网络监听许可 setsebool -P redis_port_tcp 1 2/dev/null || true # 查看SELinux对redis相关的策略 semodule -l | grep redis这里顺便提醒一下getenforce如果返回的是Enforcing你就要认真对待SELinux这层如果是Disabled或Permissive那可以先跳过但也要知道它不是永远都关着的。至于防火墙CentOS 8用的是firewalld。Redis如果只在本机跑bind 127.0.0.1就够了不需要放行端口但只要你想让局域网或云服务器上的其他机器访问就必须显式放行systemctl start firewalld systemctl enable firewalld firewall-cmd --permanent --add-port6379/tcp firewall-cmd --reload关于放行端口我多说一句云服务器厂商的安全组规则和操作系统内的firewalld是两层东西很多人在阿里云或者腾讯云上配完了安全组却忘了本机firewalld没放行结果照样连不上。这两者缺一不可。2.3 安装命令、模块流选择与版本验证选好EPEL路线后安装步骤就没什么神秘的了但每一步背后都有值得注意的点。先安装EPEL仓库dnf install -y epel-release如果你选择系统AppStream模块流路线可以先用这条命令看看当前模块状态dnf module list redis输出里会看到redis这个模块状态可能显示为[e]或者未启用。安装前的模块重置很关键因为它决定了默认版本。如果你想用固定版本可以显式启用dnf module reset redis dnf module enable redis:6这里的6代表6.x版本流。需要说明的是CentOS 8官方仓库里最高提供的Redis版本受生命周期限制8.5能拉到的版本可能是6.x8.2可能只能拉到5.x具体以实际输出为准。如果你对版本有硬性要求建议直接走源码编译不受系统源限制。执行安装dnf install -y redis安装完成后验证版本和安装路径redis-server --version which redis-server which redis-cli我这台实验机走的是EPEL源安装后redis-server --version显示Redis server v6.2.x二进制路径在/usr/bin/redis-server配置文件在/etc/redis.conf。从这个输出你也能看出RPM包把配置文件放得很有规范感。接下来进入配置环节。2.4 配置文件里的四个必调参数bind、protected-mode、requirepass、daemonizeRPM方式安装的Redis默认配置文件是/etc/redis.conf。第一次打开它你会看到洋洋洒洒上千行注释别慌日常用到的参数其实就那几个我把优先级最高的四项列出来参数默认值建议调整调整理由bind127.0.0.1按需改为0.0.0.0或留默认默认只监听本机改了才能远程访问protected-modeyes无密码时不要改成no保护模式在无密码联网环境下防止未授权访问requirepass无生产环境必须设置强密码不设密码等于把数据裸奔daemonizeyesCentOS 8 RPM默认保持默认配合systemd时由systemd管理进程不应改为no这里最有争议的点是daemonize。CentOS 8上RPM包的Redis默认配置里daemonize yes意思是Redis启动后自己进入后台守护进程模式。但当你用systemctl start redis这种方式启动时systemd本身就在管理一个服务如果Redis又自己fork成后台进程就会造成systemd认为服务已经退出、实际上Redis还在跑的现象进而带来自动重启失效、状态判断混乱的问题。CentOS 8的RPM包默认提供了一个redis.service单元文件这个文件里其实是通过redis-server /etc/redis.conf --supervised systemd这种方式启动的。加了--supervised systemd之后Redis会以非daemonize方式运行并跟systemd做进程状态通信。所以一个稳妥做法是保留配置文件里的daemonize yes不理会完全交给systemd的supervised方式驱动。如果你在配置文件里把daemonize改成no某些情况反而会因为systemd服务文件参数冲突导致启动失败。requirepass的配置要放在redis.conf的SECURITY段落不要图省事用命令行参数传因为命令行里的密码会出现在进程列表中任何能执行ps aux的用户都能看到。配置文件方式如下# 在redis.conf里找到这一行并取消注释、修改为自己的密码 requirepass MyStrongPassword123改完后启动服务前最好先做一次语法级检查redis-server /etc/redis.conf --test-memory 256 21 | head -n 20不过--test-memory主要是内存检测不是配置语法检测。配置语法检测更实用的命令是redis-server /etc/redis.conf --daemonize no如果配置文件有语法错误它会直接报错退出没有错误的话它会进入前台运行状态这时按CtrlC退出即可。注意如果此时你已经设置了requirepass且服务没起来前台模式下比较直观。3. 启动、自启与连通性验证装完了不等于能用了3.1 systemd管理下的标准启动顺序配置文件改完后启动Redis就有讲究了。CentOS 8上的Redis服务名是redis不是redis-server这一点从一开始就很容易搞混。有些人在网上看到老教程敲systemctl start redis-server结果服务不存在绕了一圈才发现服务叫redis。正确启动顺序如下systemctl daemon-reload systemctl start redis systemctl enable redis systemctl status redisdaemon-reload这一步容易被人跳过。如果你在配置文件里调整过跟进程、pidfile相关的参数或者系统服务文件有任何变化不重载systemd配置就启动服务可能出现配置文件改了半天服务跑的还是旧参数这种让人抓狂的现象。systemctl enable redis负责开机自启。CentOS 8上用dnf install装的Redis安装包默认会在/usr/lib/systemd/system/redis.service放一份服务单元文件所以enable基本都能成功。如果失败了大概率是你手动编译安装的Redis没有提供systemd单元文件那你需要自己写一个或直接用daemonize yes方式启动。3.2 用redis-cli验证三种级别的连通性服务起来之后不要急着用程序去连先用命令行客户端做三层验证。第一层是本机回环验证第二层是密码认证验证第三层是远程访问验证。第一层和第二层可以一起做redis-cli -h 127.0.0.1 -p 6379 -a MyStrongPassword123 ping如果返回PONG说明服务正常、密码认证也通过了。这里有个细节-a参数会把密码暴露在shell历史记录里输入前你可以用HISTCONTROLignorespace临时关掉记录或者在命令前加一个空格等logged用户执行时能有效避免泄露。我一般更喜欢用环境变量方式REDISCLI_AUTHMyStrongPassword123 redis-cli -h 127.0.0.1 -p 6379 pingREDISCLI_AUTH是redis-cli自带的环境变量官方文档明确支持比在命令行写密码更稳妥。第三层远程验证需要你先把bind改成0.0.0.0、设置好requirepass、放行防火墙和SELinux。然后在一台远程机器上执行redis-cli -h 你的服务器IP -p 6379 -a MyStrongPassword123 info server | grep redis_version能正常返回版本号说明远程链路全通。走到这一步安装才算真正闭环。3.3 一个容易忽视的性能起点maxmemory与持久化策略很多人装完Redis就开始写业务代码完全没有考虑内存上限和持久化策略等到线上内存爆掉、重启丢数据才回头补课。Redis默认不限制maxmemory它能用掉宿主机全部可用内存直到触发OOM Killer。这在开发环境里不是大问题但放在生产环境就是定时炸弹。建议安装完成后立刻在配置文件里至少设置一个兜底值# 设置Redis最大使用内存为512MB超过后按maxmemory-policy执行淘汰 maxmemory 512mb maxmemory-policy allkeys-lrumaxmemory-policy的选项有很多allkeys-lru是常规选择意思是所有键都参与LRU淘汰。如果你的Redis被当作严格缓存使用这个策略很合适如果当成数据库用丢了哪个键都心疼那你需要换成noeviction并做好内存容量规划。持久化方面默认配置是RDB快照也就是按时间点把内存数据写进磁盘的dump.rdb文件。CentOS 8的Redis默认配置里RDB是开着的但如果你改过工作目录或者删除过/var/lib/redis/dump.rdb需要注意目录权限ls -ld /var/lib/redis正常情况下这个目录的属主是redis用户。如果你手动创建过或改过属主要及时修正为chown -R redis:redis /var/lib/redis否则Redis启动时可能没有权限写RDB文件日志里会出现权限报错。4. 彻底卸载Redis比安装更需要耐心的清理流程4.1 卸载之前必须做好的两个动作备份与关停卸载这件事我见过太多人上来就yum remove redis结果连卸载前要备份数据的觉悟都没有删完才追悔莫及。虽然这篇是讲卸载的但作为负责任的教程我必须先给你打个预防针。如果你这台机器上的Redis里有任何不能丢的业务数据卸载前请至少做两种备份的一种# 方式一用redis-cli主动触发BGSAVE生成当前RDB快照 redis-cli -a MyStrongPassword123 BGSAVE # 等待BGSAVE完成后把数据目录整个拷贝走 mkdir -p /data/redis_backup_$(date %Y%m%d) cp -a /var/lib/redis /data/redis_backup_$(date %Y%m%d)/ # 方式二导出所有数据为命令流文件方便换机器或重装后恢复 redis-cli -a MyStrongPassword123 --rdb /data/backup/redis_dump.rdb哪种备份更靠谱如果Redis里存的是缓存数据丢了也就丢了CGI里简单处理下也能接受如果是订单号、任务队列、计数器这类有状态数据我建议两种备份都做多一份保险总不是坏事。备份做完再停服务systemctl stop redis systemctl disable redisstop让进程退出disable取消开机自启。注意顺序别反了先disable再stop会导致Redis被停掉但开机自启还挂着下次重启系统Redis自动起来你又得重新排查一遍这种低级错误我也犯过。4.2 yum remove之后还剩下哪些残留物停掉服务后最标准的卸载命令是yum remove -y redis或者如果你偏执一点用dnfdnf remove -y redis在CentOS 8上yum和dnf本质上是指向同一套API的兼容命令前者是别名后者是新实现效果完全一样。我用的是yum remove因为它在这种纯运维场景下输出更少、更清晰。执行完yum remove redisRPM包会被卸载二进制文件、systemd单元文件、依赖包如果之前是因为Redis才装上的会被清理掉一大部分。但别高兴太早数据文件、配置文件、日志文件、运行目录和pid文件并不会被RPM包默认清理。RPM卸载时只会删除安装包自己声明过的文件Redis运行时生成的文件RDB快照、AOF日志、日志文件、pid文件、以及修改后的配置文件全部不在RPM清单里。我用过一台CentOS 8测试机yum remove redis之后检查残留结果是这个画面ls -l /etc/redis.conf ls -ld /var/lib/redis ls -ld /var/log/redis ls -ld /run/redis四个路径全部还在/var/lib/redis/dump.rdb甚至还好端端躺在那里。如果你不清除这些下次重装Redis时旧配置、旧数据会被原封不动加载你会把一个已卸载的Redis环境误解成全新安装排查问题时方向完全跑偏。4.3 手动清理的完整路径清单与执行顺序卸载后的手动清理我把它整理成一张可直接照抄的清单残留类型默认路径说明清理命令主配置文件/etc/redis.confRPM卸载不会删用户改过的配置rm -f /etc/redis.conf数据目录/var/lib/redis/RDB快照、AOF日志都在这里rm -rf /var/lib/redis/日志目录/var/log/redis/Redis运行日志rm -rf /var/log/redis/运行目录/run/redis/pid文件和socket文件rm -rf /run/redis/锁或临时文件/tmp/*redis*各类运行时临时文件rm -rf /tmp/redis*按需清理systemd残留单元/etc/systemd/system/redis.service或/usr/lib/systemd/system/redis.serviceyum卸载会清掉包内单元文件但手动配置的可能残留rm -f /etc/systemd/system/redis.service*用户与用户组redis用户和redis组RPM卸载不删除自定义用户按需保留或删除清理命令一条条执行时我建议按先配置文件、再数据目录、最后运行目录的顺序来。不要先删运行目录因为如果还有进程驻留它可能在运行时重建pid文件干扰你对清理结果的判断。删除redis用户和组不是必须的。如果你这台机器以后还要装Redis保留用户反而省事如果不打算再装了可以删userdel -r redis 2/dev/null groupdel redis 2/dev/nulluserdel -r会尝试删除用户的家目录和邮件池如果未指定或不存在会报错所以加了2/dev/null避免报错打乱脚本节奏。4.4 验证卸载是否彻底的四步自检法清理完闭目养神之前还有一套自检要跑。我的习惯是用四条命令从不同角度确认卸载彻底# 第一步检查命令是否已经不存在 which redis-server redis-cli redis-sentinel 21 # 第二步检查服务是否消失 systemctl status redis 21 | head -n 5 # 第三步检查端口是否无人监听 ss -lntp | grep 6379 # 第四步检查关键路径是否为空 ls -ld /etc/redis.conf /var/lib/redis /var/log/redis /run/redis 21如果四条命令的输出全部指向不存在/未启动/未监听/路径不存在你才算真正卸载干净了。尤其是第二条systemctl status redis如果显示Unit redis.service could not be found而不是inactive (dead)那说明连systemd的单元注册信息都被清理掉了这是比较彻底的状态。这里我也想多提一句如果你卸载是为了升级到更高版本清理完旧的之后直接在干净环境上新装通常比在原环境上覆盖安装更省心。旧配置和数据文件的干扰一旦消失新版本的行为反而更容易验证。5. 安装与卸载之间最常见的四个排查场景5.1 重启后Redis没自动起来的排查链路装完Redis当时测试一切正常重启服务器之后程序却连不上Redis。这类问题我都被问过无数遍。排查链路不长但每一步都很关键。先用systemctl status redis看看当前状态。如果显示loaded但inactive (dead)并且最后一条日志里没有任何报错那基本可以断定是开机自启没生效。执行systemctl is-enabled redis如果输出是disabled或static那说明enable没有执行成功。解决办法就是补上systemctl enable redis。但如果你确定执行过enable还出现这种问题那大概率是/usr/lib/systemd/system/redis.service文件被手动改过或权限异常此时看一下文件是否存在ls -l /usr/lib/systemd/system/redis.service如果文件不存在可能是你手动编译安装Redis时没有带systemd单元文件。这种情况你需要自己写一个/etc/systemd/system/redis.service内容大致如下[Unit] DescriptionRedis persistent key-value database Afternetwork.target [Service] ExecStart/usr/bin/redis-server /etc/redis.conf --supervised systemd ExecStop/usr/bin/redis-cli shutdown Typenotify Userredis Groupredis RuntimeDirectoryredis RuntimeDirectoryMode0755 [Install] WantedBymulti-user.target写完执行systemctl daemon-reload和systemctl enable --now redis。自己写服务文件时Typenotify是关键它让系统等待Redis通知systemd我准备好了之后才报告服务已启动避免程序刚要启动systemd就判定启动成功。5.2 本机测试正常、远程连不上防火墙、SELinux、bind三层排查这是安装后最经典的故障现象是redis-cli -h 127.0.0.1 ping返回PONG但远程拿客户端连接时直接超时或者Connection refused。我的排查顺序固定是bind → 防火墙 → SELinux因为bind问题最常见、最容易被忽视。第一步检查redis.conf里的bind配置grep -E ^(bind|protected-mode) /etc/redis.conf如果还是bind 127.0.0.1 -::1那远程连不上是必然的因为Redis根本没监听对外网卡。改成bind 0.0.0.0后重启服务sed -i s/^bind .*/bind 0.0.0.0/ /etc/redis.conf systemctl restart redis第二步检查防火墙注意firewalld默认区域里通常不带6379firewall-cmd --list-ports firewall-cmd --permanent --add-port6379/tcp firewall-cmd --reload第三步检查SELinux查看是否拦截grep redis /var/log/audit/audit.log 2/dev/null | tail -n 10 ausearch -m avc -ts recent | grep redis如果看到denied关键字可以用setsebool -P redis_port_tcp 1或者更粗暴但有效的setsebool -P httpd_can_network_connect 1不推荐来解决。正规做法是查SELinux里的redis策略类型semanage port -l | grep redis有些版本里SELinux只允许Redis监听redis_port_t类型端口而默认类型可能没包含6379需要额外注册semanage port -a -t redis_port_t -p tcp 6379如果semanage命令不存在需要先装policycoreutils-python-utilsCentOS 8上直接dnf install -y policycoreutils-python-utils即可。5.3 卸载后重装配置被继承的诡异现象有个场景我特别想拿出来单独说卸载Redis后自信满满地重装结果发现新装好的Redis能直接通过旧密码连接或者数据目录里还有旧键值。很多人第一反应是重装了怎么没重置其实根因就是前面提到的残留目录。当你执行yum remove redis后如果没删/etc/redis.conf重装时RPM包检测到配置文件已存在会根据包策略选择保留原文件RPM的默认行为是覆盖现有配置文件为.rpmnew但有的配置策略是保留现有文件这跟RPM的%config(noreplace)标记有关于是新装的Redis还是用着你老的密码、老的持久化设置看起来像灵异事件。解决办法就是回到4.3节的清理清单把/etc/redis.conf、/var/lib/redis这些残留清理干净再重装。重装后第一次启动前先去/var/lib/redis看一眼是不是空的确认它由一个全新Redis生成这样才能确定你是在一个干净环境里。5.4 安装或卸载时抛依赖冲突与命令冲突的通用解法CentOS 8上装Redis时还经常遇到一类问题明明执行的是dnf install redis却报Problem: conflicting requests或者其他依赖错误。这类问题大多源于模块流混乱、EPEL和AppStream之间版本冲突或者本地残留的旧元数据。遇到依赖类报错我的通用处理顺序是# 第一步清理dnf元数据缓存 dnf clean all dnf makecache # 第二步重置redis模块流避免多版本流互相干扰 dnf module reset redis # 第三步显式启用想要的模块流 dnf module enable redis:6 # 第四步重新安装 dnf install -y redis如果还报错可以加上--allowerasing但这两个选项有风险--allowerasing表示允许dnf移除与本操作冲突的其他软件包用的时候要看清它会删掉什么dnf install -y redis --allowerasing我平时不建议滥用这个选项只有在报错信息明确指向某个包比如旧的redis兼容包或redis-sentinel包时才使用。除了依赖坑还有命令冲突的坑。如果你机器之前用源码编译方式装过Redis/usr/local/bin/redis-server跟RPM方式装的/usr/bin/redis-server会同时存在which redis-server的结果取决于PATH顺序导致你永远启用的不是新装的那个版本。这种时候处理办法是# 查看两个路径下版本差异 /usr/bin/redis-server --version /usr/local/bin/redis-server --version # 卸载源码安装版本的残留即删除其可执行文件与相关目录 rm -f /usr/local/bin/redis-server /usr/local/bin/redis-cli rm -rf /usr/local/etc/redis /usr/local/var/redis 2/dev/null清理完再重新确认which redis-server指向的是/usr/bin/redis-server。6. 一些我在CentOS 8上反复踩过之后才明白的细节整篇走下来安装和卸载的流程都不复杂但那些看起来不起眼的细节才是真正区分能用和好用的地方。我做运维这几年在Redis安装卸载这件事上积累了几条自己的习惯分享给你做参考。第一个习惯是不管安装还是卸载都先写个操作前清单再动手。安装前我至少会确认三件事SELinux状态、防火墙放行规则、当前系统源里Redis的模块流版本。卸载前我至少会确认三件事是否需要备份RDB/AOF数据、是否有程序还在连接Redis、systemctl list-units | grep redis里所有相关服务是否都已停掉。这样做的好处是即使中途忘记某一步回看清单能快速定位问题不至于在命令行里反复试错。第二个习惯是每次重装Redis前强制清理残留目录。哪怕我99%确定上一轮卸载已经干净了还是会rm -rf /etc/redis.conf /var/lib/redis /var/log/redis /run/redis走一遍。清理后多花十秒钟换来的是新环境行为的可预测性这笔账怎么算都划算。第三个习惯是注意配置文件里的版本差异。CentOS 8不同小版本的模块流提供的Redis版本不一比如同样是dnf install redis在CentOS 8.2上可能是5.0.14在CentOS 8.5上可能是6.0.x。我遇到过最尴尬的情况是照着网上5.x的redis.conf参照文章调整6.x的配置由于某些参数比如replica-read-only的默认值、io-threads默认关闭在版本间有差异导致调了个寂寞。如果你的生产环境对Redis版本极其敏感建议用redis-server --version确认版本后再去翻对应的官方文档不要只看博客。最后一个习惯建议你在生产机上给Redis配置监控。不需要上特别复杂的系统至少用redis-cli info定时采一下used_memory_rss、rdb_last_bgsave_status、connected_clients这几个指标。服务器的内存、磁盘如果持续紧张Redis往往是第一个出问题的组件有个日志记录能省去事后诸葛亮的大量排查时间。我写这篇东西的初衷其实是想把安装和卸载这两个看似对称、实际上完全不对称的过程讲明白。安装是往上盖楼卸载是拆除并确认地基也清空了。没了残留的干扰你以后每次重装Redis得到的都是一个干净、确定、可预期的环境排错时的脑力负担会小很多。希望这份操作手册能让你在CentOS 8上面对Redis时少走几步弯路。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑