如何正确启动与关闭Redis服务?

来源:Nginx教程作者:叶子头衔:草根站长
导读:本期聚焦于叶子创作的《如何正确启动与关闭Redis服务?》,敬请观看详情。你是否遇到过Redis明明关掉了,端口却依然被占用的情况?或者使用后台启动却找不到日志?这篇文章从命令行的角度出发,讲解Redis在开发环境与生产环境中不同的启动与关闭方式。内容包括redis-server的前台与守护进程启动、redis-cli shutdown的优雅关闭流程,以及通过systemd和Windows服务管理Redis的方法。文中给出具体命令示例,分析前台与后台模式、保存与不保存数据等常见场景的利弊,帮助大家避免数据丢失和进程残留问题。同时,对于端口冲突、认证失败等启动关闭异常也提供了排查思路。无论你是刚刚接触Redis,还是在部署多实例环境时碰到疑惑,都能从本文获得可操作的参考。

Redis作为内存数据库,启动与关闭操作看似简单,但在不同环境和配置下却有不少需要注意的细节。误用前台模式会导致终端被长时间占用,贸然kill -9则可能丢失数据。本文将从命令行操作入手,系统梳理Redis服务的启动方式、关闭方法以及系统服务管理技巧,并解释每种操作背后的原理。

如何正确启动与关闭Redis服务?

Redis服务的前台启动与守护进程启动

在没有任何配置的情况下,直接在命令行输入redis-server,Redis会以默认参数启动,监听本机6379端口。此时服务运行在前台,终端会被日志输出占据,按Ctrl+C可以终止进程。这种启动方式的特点是日志即时可见,适合开发调试时观察Redis的实时输出。但一旦关闭终端,Redis进程也会跟着退出,因此不适合作为正式服务运行。

要让Redis在后台稳定运行,最标准的方式是启用守护进程模式。设置配置文件redis.conf中的daemonize yes,然后执行redis-server redis.conf,Redis启动后会脱离当前终端,在后台运行并依照配置生成PID文件。如果不希望修改配置文件,也可以在启动命令中直接追加参数:

redis-server --daemonize yes --port 6379

使用守护进程模式后,启动命令会立即返回,Redis进程由自身独立管理。这种方式比nohup redis-server &更可靠,因为nohup仅让命令忽略挂断信号,不会自动维护PID文件,也不便于后续通过规范方式停止服务。另外,当需要在一台机器上启动多个实例时,可以分别指定不同的端口和配置文件:

redis-server /etc/redis/redis-6380.conf --port 6380 --daemonize yes

注意,如果配置文件中daemonize仍为no,即使命令行带了--daemonize yes,Redis会不会按照命令行参数生效呢?实际上命令行参数优先级高于配置文件,因此可以正常生效。但建议把这项设置固化到实例对应的配置文件中,避免每次启动时依赖手工追加参数。

使用redis-cli shutdown优雅关闭Redis

与启动相对应,关闭Redis服务最推荐的命令是redis-cli shutdown。该命令会向Redis服务端发送SHUTDOWN指令,Redis收到指令后先执行持久化操作,再释放端口并退出进程。通过这种方式关闭服务,可以最大程度避免数据丢失。如果Redis配置了requirepass,连接时需要通过-a参数或交互式认证提供密码。

Redis在关闭时对数据保存行为有一些细节:如果配置为默认的RDB快照策略,shutdown会尝试将当前数据保存到磁盘;如果使用SHUTDOWN NOSAVE,则跳过数据保存直接退出;而SHUTDOWN SAVE则是强制保存后退出。在命令行中,对应参数分别是:

redis-cli shutdown
redis-cli -p 6380 shutdown
redis-cli -p 6380 shutdown nosave
redis-cli -h 127.0.0.1 -p 6380 -a 123456 shutdown

需要注意的是,如果Redis服务没有监听在默认的6379端口,或绑定了特定IP,关闭时必须使用对应的-h-p参数,否则连接失败。有时候关闭命令执行后并不会立即退出,而是出现“Waiting for the cluster to leave”之类的提示,这种情况通常发生在集群模式下的节点上,需要结合集群状态进行节点下线操作,单纯的shutdown不能彻底关闭整个集群。

另一种关闭方式是通过系统信号:使用kill命令向Redis进程发送SIGTERM信号,Redis会捕获信号并执行同样的关闭流程。但使用SIGKILL(即kill -9)时,进程会被强制终止,不会执行任何持久化操作,容易导致最近写入的数据丢失。因此在生产环境中应尽量避免kill -9,除非Redis进程已经无法响应任何命令。运维人员可以通过redis-cli ping确认服务状态,再决定是否使用强制手段。

通过systemd和Windows服务管理Redis

在生产Linux服务器上,Redis通常由systemd管理。通过apt或yum安装的Redis包,会自动注册redis.service单元。使用systemctl start redis启动服务,systemctl stop redis停止服务,systemctl enable redis设置开机自启。systemd管理的好处是,如果进程意外退出,可以设置Restart策略让系统自动拉起服务,同时日志统一由journald收集。

systemctl start redis
systemctl status redis
systemctl stop redis
systemctl restart redis

在Windows环境下,Redis提供了Windows服务支持。可在命令行进入Redis安装目录,执行redis-server --service-install redis.windows.conf将Redis注册为Windows服务。服务注册后,启动、停止和卸载分别使用--service-start--service-stop--service-uninstall参数。需要注意的是,服务方式启动的Redis不会在终端显示日志,日志可以写入指定的文件或通过日志工具查看。

redis-server --service-install redis.windows.conf --loglevel verbose
redis-server --service-start
redis-server --service-stop
redis-server --service-uninstall

实际运维中,还可以在服务管理器(services.msc)中把Redis设为“自动”,让Windows在开机时自动启动服务。这种方式与Linux下的systemd类似,能够简化人工操作。不过,Windows版的Redis通常老于Linux版本,如需使用最新功能,建议在生产环境优先选用Linux部署。

启动与关闭时的常见问题排查

启动Redis时最常遇到的错误是端口被占用。例如另一个Redis实例已经在监听6379端口,再次启动时控制台会输出Address already in use提示。此时可以通过lsof -i:6379netstat -ano查找占用端口的进程,确认后停掉旧实例或修改新实例端口。在Windows上,可以使用netstat -ano | findstr 6379找出进程PID,再通过任务管理器结束进程。

关闭时常见的异常是redis-cli shutdown连接不上服务。这通常由两种原因造成:一是bind参数仅绑定了127.0.0.1,而使用-h指向了其他IP;二是protected-mode保护模式阻止了非本机连接。遇到这种情况时,关闭命令需要显式加入-h 127.0.0.1,或检查配置文件中的protected-mode设置。另外,如果Redis设置了密码,命令行要提供正确的密码,否则会收到NOAUTH Authentication required错误。

判断Redis是否真正关闭,可以在原端口再次执行redis-cli ping。如果返回PONG,说明服务仍在运行;如果出现Could not connect to Redis,说明已成功停止。在脚本化运维中,可以将启动和关闭操作封装成函数,并把关键步骤的返回值记录下来,这样能够更直观地判断命令是否执行成功。

最后需要强调的是,启动与关闭Redis的命令不是一成不变的。在云端托管实例、容器化部署或使用集群模式时,操作入口和命令参数会有差异,但底层原理仍然相同:启动时加载配置并开始监听端口,关闭时尽量完成持久化和资源释放。理解这些机制,无论面对何种环境,都能找到正确的执行方式。

Redis启动命令Redis关闭命令Redis服务管理修改时间:2026-08-27 10:19:20

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。