ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

Linux下安装Redis全攻略:环境准备、编译配置与生产实践

Linux下安装Redis全攻略:环境准备、编译配置与生产实践 有时候运维工作拼的不是手速而是规划。以我这些年帮客户搭建缓存服务的经验来看安装 Redis 本身花的力气只占三成剩下七成都花在版本选择、环境确认、参数预判这些“看不见的准备工作”上。很多新手上来就下载源码包、解压、make装完才发现要么版本太老要么 PID 文件目录不存在要么被防火墙挡在门外最后还是得回头补课。这篇文章就从最真实的部署流程出发把 Linux 下安装 Redis 的完整链路拆开揉碎包括环境准备、安装方式选型、配置项调优、开机自启、客户端连接以及我在生产环境里真正踩过的坑。无论你是刚入门的运维新人还是要自己搭一套缓存服务的后端开发照着这套思路走基本不会翻车。1. 部署前的摸底不要急着敲命令我在前面提到安装 Redis 并不是“下载-编译-启动”这么简单。一个合理的部署节奏应该是先搞清楚服务器是什么系统、什么 CPU 架构、有没有历史遗留的 Redis 进程或端口占用再决定用哪种安装方式。磨刀不误砍柴工这一步做扎实了后面能省掉大量排查时间。1.1 先确认 Linux 发行版和内核版本不同发行版的软件生态差异很大安装 Redis 的路径也完全不同。Debian/Ubuntu 系列的包管理器是 aptCentOS/RHEL 系默认是 yum 或 dnfOpenSUSE 用 zypperArch 系用 pacman。虽然我们最终可以选择源码编译但我还是建议先执行几条命令把系统信息看清楚cat /etc/os-release uname -a nproc free -hcat /etc/os-release能直接看到系统名称和版本号uname -a可以确认内核版本和架构是 x86_64 还是 aarch64nproc查 CPU 核数free -h看内存。Redis 是单线程为主的程序CPU 核数对单实例性能影响不像内存那么大但内存大小直接决定你后面能不能开 RDB 持久化、能设置多大的 maxmemory。这里有个经验如果你拿到的是一台老旧的 CentOS 7 或者系统里 GCC 版本低于 8安装 Redis 7.x 之前最好先考虑升级 GCC或者干脆用 Docker 跑一个官方镜像省去编译环境带来的麻烦。我在 6.x、7.x 上都遇到过因为编译器太旧导致编译中途失败的情况后面在常见问题部分会详细说。1.2 端口、用户和目录规划越早定越好Redis 默认端口是 6379这个端口在公网环境下经常被扫描工具盯上所以生产环境尽量不要裸奔在默认端口上至少也要改成一个不常见的端口再配合防火墙白名单。你可以在安装之前就想好Redis 跑在哪个用户下、数据目录放哪里、日志放哪里、PID 文件放哪里。我通常的规划是这样的运行用户单独创建 redis 用户不直接用 root安装目录/usr/local/redis数据目录/data/redis日志目录/var/log/redisPID 文件/var/run/redis/redis.pid为什么要单独建一个用户因为 Redis 本身有 protected-mode而且如果它被利用执行危险命令低权限用户能造成的破坏要小得多。虽然很多人图省事用 root 跑但在安全审计和实际攻防演练中这种习惯是第一批被扣分的项。建用户的操作也很简单useradd -s /sbin/nologin redis mkdir -p /data/redis /var/log/redis /var/run/redis chown -R redis:redis /data/redis /var/log/redis /var/run/redis-s /sbin/nologin表示这个用户不能登录 Shell只用来跑服务这是最小权限原则的落地。后面的目录权限如果给错Redis 启动时会报Cant open the log file或者Cant chdir这类让人摸不着头脑的错误实际上根源就是权限不够。1.3 下载 Redis 源码包的正确姿势拿到源码包有两种常见途径去官网 redis.io 的下载页手动下载或者直接在 Linux 服务器上用wget拉取。我习惯直接用 wget因为省去本地下载再上传的步骤。需要注意官网提供的下载地址一般长这样wget https://download.redis.io/releases/redis-7.2.4.tar.gz下载之后记得解压tar xzf redis-7.2.4.tar.gz cd redis-7.2.4解压出来的目录里就能看到README.md、Makefile、src、deps等目录。如果你下载的是带有rc后缀的候选版本我建议不要在正式环境使用RC 版本意味着还处于测试阶段稳定性需要自己评估。下载完成后最好用sha256sum校验一下文件完整性官方页面会给出对应的哈希值这一步能避免下载损坏的包。2. 三种安装方式对比以及我为什么最常用源码编译Redis 在 Linux 上常见的安装方式有三种源码编译安装、包管理器安装、Docker 容器运行。它们各有适用场景没有绝对的好坏。下面我逐个说清楚再给出我的选型建议。2.1 源码编译安装适合生产环境步骤最完整源码编译是我最推荐的方式尤其适合生产环境。它的最大优势是可控性你可以选择任意版本可以指定安装路径可以按需裁剪编译选项。虽然步骤比包管理器多一点但整套流程清晰出问题时也容易定位。正常的编译三部曲如下make distclean 2/dev/null; make MALLOClibc make -j$(nproc) make install PREFIX/usr/local/redis这里有个细节Redis 默认使用 jemalloc 内存分配器在某些系统上编译时会报jemalloc.h: No such file or directory这时候加MALLOClibc就可以绕过这个问题。不过不要害怕我遇到的大部分情况其实是因为缺少编译基础组件后面会有更详细的排查方法。make -j$(nproc)的意思是让 make 并行编译-j后面的数字是并行任务数用nproc自动获取 CPU 核数可以大幅缩短编译时间。在一台 8 核的机器上Redis 7.x 的编译通常两三分钟就能完成。编译完成之后make install会把redis-server、redis-cli、redis-sentinel、redis-benchmark、redis-check-aof、redis-check-rdb这些可执行文件复制到/usr/local/redis/bin目录。你可以把/usr/local/redis/bin加入 PATH方便后续执行命令echo export PATH/usr/local/redis/bin:$PATH /etc/profile.d/redis.sh source /etc/profile.d/redis.sh源码编译的方式看着繁琐但后续升级、回滚、多版本共存都很方便这也是它在生产环境里能站稳脚跟的原因。2.2 包管理器安装快速省事适合开发测试如果你的需求是拿一台机器快速验证 Redis 功能不追求特定版本那么直接用系统自带的包管理器是最效率的。在 Ubuntu/Debian 上apt update apt install redis-server -y在 CentOS/RHEL 上yum install redis -y包管理器安装完成后服务通常已经被注册为 systemd 服务直接就能systemctl start redis。但需要注意系统仓库里的 Redis 版本可能滞后于官方版本比如某些 CentOS 默认源里的 redis 还是 3.2。Redis 3.2 对于学习基本命令、测试简单缓存场景完全够用但如果你要体验 Stream 类型、ACL 权限、多线程 IO 这些新特性就必须要换源或者走源码编译。另外不同发行版包管理器启动 Redis 的姿势不完全一样Ubuntu 上装完默认是被 systemd 接管了所以直接systemctl enable redis-server设置开机自启CentOS 上装完可能会提示你用redis-server /etc/redis.conf手动启动。我不会说包管理器这种方式不好它其实非常省心只是你要心里有数你得到的 Redis 是什么版本默认配置是否符合你的业务预期。2.3 用 Docker 运行 Redis容器化环境的标配现在很多服务器本身就跑着 Docker这时再用宿主机直接装 Redis 反而显得冗余。通过 Docker 安装 Redis 最大的优势是环境隔离几乎不受宿主机系统版本和依赖库的影响一条命令就能起一个实例docker run -d --name redis \ -p 6379:6379 \ -v /data/redis:/data \ -v /etc/redis/redis.conf:/etc/redis/redis.conf \ redis:7.2 redis-server /etc/redis/redis.conf这里说一下参数的含义-d表示后台运行-p 6379:6379把宿主机的 6379 端口映射到容器的 6379-v是把宿主机目录或文件挂载进容器。为什么要挂载数据目录因为容器是临时的一旦容器被删除容器内部的数据就全部丢失而 Redis 的 RDB 和 AOF 文件如果存放在宿主机/data/redis里容器重建后数据还在。用 Docker 跑 Redis 适合已经有微服务架构、习惯用容器管理服务的团队。但在单机小规模场景下我反而觉得没必要多引入 Docker 这层依赖直接源码编译更轻量资源占用也更少。如果你需要做主从复制或者哨兵集群那 Docker Compose 或者 Kubernetes 的编排能力就体现优势了这个后面可以单独写一篇不是本文的重点。3. 配置文件里最值得细看的几个参数装好 Redis 只是万里长征第一步真正决定稳定性和安全性的是配置文件redis.conf里的参数。很多人安装完直接默认启动结果用一段时间就遇到内存暴涨、连接数打满、数据莫名丢失等问题。这一节我把最核心的几个配置项串讲一遍。3.1 启动模式daemonize 与 supervisord 的坑Redis 默认配置里daemonize是no也就是前台运行。如果你直接执行redis-server /path/to/redis.conf会看到日志不停刷屏终端也被占住。改成daemonize yes后Redis 会以守护进程方式在后台运行终端可以继续干别的。这里有一个非常典型的坑在 Docker 环境下Redis 官方镜像里默认daemonize no因为容器需要一个前台进程来维持容器生命。如果你把daemonize yes写进被挂载的配置文件里容器可能会启动后立即退出看起来像什么都没发生。所以判断要不要开 daemonize先想清楚你是在裸金属/虚拟机环境部署还是在容器里部署。宿主机部署用 daemonize yes 顺手容器环境必须保持前台运行。另外还有一个配套参数是pidfiledaemonize 开启后 Redis 会把进程号写入这个文件。如果配置了 pidfile但对应目录不存在Redis 同样会启动失败。所以前面规划目录时我就特意提醒过/var/run/redis这个目录要提前建好、给对权限。3.2 bind、protected-mode 和 requirepass安全三件套Redis 默认配置里有几道安全关卡默认情况下它们其实是帮你挡住外部扫描的但很多教程为了图方便会让人直接注释掉 bind 或把 protected-mode 改成 no结果服务器就变成了公网“肉鸡”。我强烈建议你按下面的思路配置bind 0.0.0.0 protected-mode yes requirepass your-strong-passwordbind 0.0.0.0表示监听所有网卡适合需要被局域网内其他机器访问的场景。如果只用本机访问可以只写bind 127.0.0.1。protected-mode yes的含义是当 Redis 没有设置密码且没有显式 bind 时只允许本机回环地址连接避免未授权访问。一旦你设置了 bind 非本机地址Redis 会认为你“有意暴露服务”这时候如果没有密码它是会拒绝外部连接的这正是保护机制在起作用。所以完整的逻辑是要么bind 127.0.0.1只在本地用要么requirepass设一个高强度的访问密码把 protected-mode 保持开启。不要一上来就protected-mode no那是把自己往火坑里推。设置密码后客户端连接时需要redis-cli -a your-password或者在连接串里带上密码。3.3 最大内存与淘汰策略Redis 作为缓存最怕的就是内存被写满。不设置maxmemory的话Redis 会一直占用服务器内存直到触发 OOM然后整个进程可能被系统杀掉。设置maxmemory的方式如下maxmemory 4gb maxmemory-policy allkeys-lrumaxmemory 4gb表示 Redis 最多使用 4GB 内存超过之后就按照maxmemory-policy指定的策略淘汰 keys。常见的淘汰策略有这么几种策略含义适用场景noeviction不淘汰直接返回错误数据库不可丢数据但容易触顶allkeys-lru所有 key 按 LRU 近似算法淘汰最常见的缓存场景volatile-lru只淘汰设置了过期时间的 key混合存储场景allkeys-lfu按访问频率淘汰最不常用的 key热点数据特征明显的场景volatile-ttl淘汰剩余 TTL 最短的 key想让快过期的 key 先走我给你的建议是如果是纯缓存用allkeys-lru基本没错如果缓存里混着一些不能丢的业务数据可以改成volatile-lru并给这些重要 key 设置过期时间或者干脆不设过期。实际生产里我曾经见过把maxmemory设得比物理内存还高的情况结果 swap 被疯狂使用性能骤降这个问题在后面常见问题里也值得记录一笔。3.4 持久化RDB 与 AOF 的取舍Redis 虽然叫缓存但很多场景里它承担着部分存储职责这时候数据持久化就不能马虎。save相关参数控制 RDB 快照默认配置大约是这样的save 900 1 save 300 10 save 60 10000意思是900 秒内有 1 次写操作就触发快照300 秒内有 10 次写操作触发快照60 秒内有 10000 次写操作触发快照。RDB 文件是二进制快照恢复速度快但如果 Redis 在两次快照之间崩溃这部分数据会丢。AOF 则是追加日志默认关闭需要自己开启appendonly yes appendfsync everysecappendfsync有三个选项always、everysec、no。always每条写命令都刷盘最安全但性能最差everysec每秒刷一次盘性能和安全的平衡点no让操作系统自己决定什么时候刷盘性能最好但数据丢得最多。日常使用我推荐everysec。如果你对数据一致性要求极高可以用always但要做好吞吐量打折的心理准备。4. 从启动到开机自启把运维流程标准化Redis 装好之后接下来的问题是怎么让它优雅地启动、优雅地停止、重启不丢配置并且开机自动拉起。这些看似琐碎的步骤恰恰是生产环境稳定运行的地基。4.1 前台启动和后台启动到底怎么选很多人分不清redis-server和redis-server /etc/redis.conf有什么区别。前者用的是内置默认配置后者才是加载你的自定义配置文件。我遇到不少新手直接redis-server启动结果改的 redis.conf 根本没生效白忙活一场。正确的启动方式是/usr/local/redis/bin/redis-server /usr/local/redis/redis.conf如果你没有把可执行文件放进 PATH就得写全路径。配置文件路径错了Redis 也会启动失败或者使用默认配置。启动之后用redis-cli ping验证返回PONG就说明服务已经起来了。如果配置了 requirepass需要先redis-cli -a 密码 ping。后台启动配置了daemonize yes之后启动命令执行完会立即返回Redis 进程在后台持续运行。这时候别急着走最好看一眼日志文件确认没有异常告警。日志路径在配置里是logfile /var/log/redis/redis.log默认可能是空字符串表示输出到标准输出所以如果你的配置里没写 logfiledaemonize 模式下日志会丢失。4.2 把 Redis 注册成 systemd 服务systemd 是现代 Linux 发行版的标准服务管理器所有主流发行版都支持。把 Redis 纳入 systemd 管理后可以用systemctl start redis、systemctl enable redis这类统一命令操作服务还能实现开机自启和故障自动拉起。在/etc/systemd/system/redis.service里新建一个服务文件参考内容如下[Unit] DescriptionRedis Server Afternetwork.target [Service] Typeforking Userredis Groupredis ExecStart/usr/local/redis/bin/redis-server /usr/local/redis/redis.conf ExecReload/bin/kill -USR2 $MAINPID ExecStop/bin/kill -TERM $MAINPID PIDFile/var/run/redis/redis.pid Restarton-failure RestartSec5 [Install] WantedBymulti-user.target这里有几个关键点要说Typeforking表示 Redis 启动后自己 fork 成守护进程所以 systemd 会通过 PIDFile 来跟踪服务主进程这个 PIDFile 必须和 redis.conf 里配置的 pidfile 保持一致。Userredis和Groupredis让 Redis 以低权限用户运行这是安全基线要求。Restarton-failure保证进程因异常退出时能自动拉起但要注意如果 Redis 是被密码错误或配置问题卡住反复退出这个自动重启会变成一种“抖动”日志里会有大量重启记录排查时结合journalctl -u redis看。文件写好后执行systemctl daemon-reload systemctl enable redis systemctl start redis systemctl status redisdaemon-reload必须执行否则 systemd 不会识别新建的服务文件。status命令会显示当前服务状态、主进程号、最近的日志这是排查问题的第一入口。4.3 日常运维重启、重载和优雅关闭Redis 支持两种常见信号SIGTERM正常关闭SIGKILL强制终止后者可能导致数据丢失。通过 systemd 操作时systemctl stop redis会发 SIGTERMRedis 会把内存中的数据执行保存后退出这是优雅关闭的标准姿势。如果修改了 redis.conf很多参数可以通过systemctl reload redis触发ExecReload里配置的kill -USR2 $MAINPID来生效。但要注意并不是所有配置都支持热加载比如maxmemory、appendonly这些可以在运维时通过redis-cli config set在线修改而这些修改默认是临时的重启后失效要让修改永久生效还得在 redis.conf 里同步改或者用CONFIG REWRITE命令把运行时配置写回配置文件。日常巡检时我的习惯是执行三条命令redis-cli info server | grep redis_version redis-cli info memory | grep used_memory_human redis-cli info stats | grep instantaneous_ops_per_sec一条查版本一条看内存占用一条看当前 QPS。这三项能覆盖绝大多数健康度判断场景。5. 连接验证与客户端选型装完不能只会 redis-cli安装部署完成只是开始接下来你需要验证服务是否真的可用并且选择适合团队使用的客户端工具。这里既有命令行工具也有可视化客户端按使用场景不同分开说。5.1 用 redis-cli 做功能验证redis-cli是官方自带的命令行客户端也是排查问题的第一把钥匙。最基本的连接命令redis-cli -h 192.168.1.10 -p 6379 -a your-password进入交互模式后执行ping返回PONGset foo bar能写入get foo能读取说明服务端一切正常。redis-cli还支持很多排查类命令比如redis-cli info查看运行时信息redis-cli monitor实时打印所有请求redis-cli --bigkeys扫描大 Key。尤其--bigkeys在生产环境里非常有用可以快速找出内存占用异常的大键这类键往往会导致慢查询和内存倾斜。还有一个小技巧redis-cli -a在命令行里直接带密码会出现在 shell 历史里有安全隐患。更稳妥的做法是设置环境变量REDISCLI_AUTHexport REDISCLI_AUTHyour-password redis-cli ping这样 redis-cli 会自动读取环境变量里的密码避免密码出现在命令行参数和 history 里。这一点很多老运维也会忽略。5.2 可视化客户端Another Redis Desktop Manager 值得一试命令行适合排查问题但要快速浏览数据、批量修改 key可视化客户端效率更高。市面上常见的几款工具我简单列一下Redis Desktop Manager老牌工具交互成熟但部分版本收费Another Redis Desktop Manager开源免费跨平台功能完善Redis InsightRedis 官方推出的桌面工具界面新内置分析能力命令行爱好者也可以用 redis-cli 加上--json之类参数做辅助我个人比较推荐 Another Redis Desktop Manager因为它在 Linux 和 Windows 上都有现成客户端连接远程 Redis 时只需要填 IP、端口、密码还能按正则表达式匹配 key。不过要注意生产环境使用可视化工具时尽量只开只读权限的账号避免误操作把数据清掉。正因如此Redis 6.0 之后引入的 ACL 权限体系值得认真用起来给不同角色分配最小权限。5.3 局域网多实例部署时要注意什么如果你的服务器需要被多台业务机器连接一定要确认几个点第一防火墙放行对应端口比如firewall-cmd --add-port6379/tcp --permanent或者安全组规则里加白名单第二确认bind没有只停留在127.0.0.1第三确认客户端连接串里有正确的密码。多实例部署时建议每个实例用独立端口、独立配置目录、独立持久化目录比如 6380、6381 分别对应不同的业务线这样可以避免相互影响。我曾经接手过一台服务器上面跑着三个 Redis 实例由于配置目录没有分开一个实例执行了FLUSHALL其他实例的数据也一起被清掉了。这个教训说明多实例环境下不仅要隔离文件目录更要隔离权限账号操作时看清当前连接的是哪个端口。6. 常见问题与排查思路这些坑我替你先踩了最后这部分是我最想分享的内容。安装 Redis 过程中绝大多数报错都不是玄学而是有明确原因的。下面整理几个高频问题每个问题附带排查步骤和解决思路。6.1 编译报错jemalloc/jemalloc.h: No such file or directory这个报错可以说是源码安装时出现频率最高的。Redis 默认的构建方式会使用deps/jemalloc如果系统缺少必要的构建工具链或者某些系统路径下的头文件缺失就会导致编译中断。解决办法有三种第一种在 make 时强制使用 libc 内存分配器make MALLOClibc第二种先清理编译缓存再重试make distclean make第三种安装构建依赖后重新编译# Ubuntu/Debian apt install build-essential tcl pkg-config -y # CentOS/RHEL yum groupinstall Development Tools -y一般做完这三步编译问题就迎刃而解了。如果还不行把错误信息完整贴到搜索引擎里基本都能找到对应发行版的解决方案。6.2 启动后看不到进程日志也没报错这种情况往往让人最头疼。执行redis-server redis.conf后命令没有输出但ps -ef | grep redis也看不到进程服务似乎“凭空消失”了。第一步先确认配置文件里的daemonize是不是 yes如果是Redis 会 fork 到后台命令本身没有输出是很正常的。第二步检查 pidfile 路径如果配置了/var/run/redis/redis.pid而/var/run/redis目录不存在进程会启动失败。第三步看日志文件如果配置了logfile去对应路径查看如果没配置Redis 默认向 stdout 输出daemonize 后这些输出往往就丢了。所以我的建议是配置阶段一定要把 logfile 配好排查问题时日志就是最可靠的现场。6.3 客户端连接超时问题多半出在防火墙Redis 装上去了本机 redis-cli 能连但远程一连接就超时。遇到这种问题先别怀疑 Redis 配置按顺序检查三个地方第一bind是否只绑了回环地址。执行redis-cli -h 127.0.0.1 info能连但redis-cli -h 服务器IP info连不上多半就是 bind 问题。第二防火墙是否放行端口。CentOS 7 以上默认用 firewalld执行firewall-cmd --list-all查看开放端口。第三云厂商安全组规则。很多云服务器即使系统防火墙放行了安全组层面仍会拦截需要在控制台配置入方向规则。我之前处理过一个案例排查到最后发现是云平台安全组只放行了 22 端口Redis 的 6379 虽然在系统防火墙里放行了但到云平台那一层就被拒了。这类问题只要按“本机-防火墙-安全组”的顺序逐层排查几分钟就能定位。6.4 maxmemory 设置过高导致 swap 抖动这也是一个很隐蔽的性能问题。服务器物理内存 8GBRedis 的 maxmemory 也设成 8GB结果 Redis 进程占用的内存加上系统其他程序的内存一共超过了物理内存操作系统开始把 Redis 的内存页换到 swap。Redis 一旦发生 swap访问延迟会从微秒级飙升到几十毫秒甚至更高。排查方法很简单执行redis-cli info memory查看used_memory同时用free -h看 swap 使用情况。如果 swap 明显增长说明内存分配过大了。正确的做法是给 Redis 预留足够的内存余量比如物理内存 8GB 的机器maxmemory 设置 4GB 到 5GB 已经算比较激进了剩下要留给操作系统页缓存和其他进程。还有一种更细的做法是启用内核参数vm.swappiness1尽量减少 swap 的使用倾向。6.5 Redis 频繁重启先看日志再看内核参数生产环境最怕 Redis 无缘无故退出。这类问题我会先看journalctl -u redis如果发现有Background saving error或者Cant save in background: fork: Cannot allocate memory那基本可以判断是 overcommit 策略设置导致的。Linux 默认的vm.overcommit_memory0Redis 做 RDB 持久化时 fork 子进程会尝试申请一块接近父进程内存大小的虚拟内存如果系统认为自己内存不足fork 就会失败。解决方式是设置sysctl vm.overcommit_memory1这个值的意思是允许进程申请超过物理内存的虚拟内存Redis 的 fork 就不会因为虚拟内存不足而失败。同时还可以开启 Transparent Huge Pages 禁用因为 THP 会增大 Redis 的延迟和内存消耗可以通过如下方式临时关闭echo never /sys/kernel/mm/transparent_hugepage/enabled持久化设置可以写到/etc/sysctl.conf和相关的 rc.local 或 systemd unit 里。这类内核参数是很多安装教程不会提的但生产环境一旦遇到 Redis 无故崩溃它们往往就是幕后黑手。写在最后的一点个人经验这篇文章里的每一步几乎都是我在真实服务器上跑过的。从最早只会yum install redis然后被老版本坑到后来坚持源码编译、规范目录、设置 systemd再到把安全参数和内核参数调到位这个进化过程其实就是运维经验的积累过程。如果你要问我最重要的建议是什么我会说安装 Redis 不难难的是安装之后那一整套配置和运维习惯。把 daemonize 和 pidfile 的关系搞清楚把 bind 和 protected-mode 的关系搞清楚再养成看一眼日志的习惯你就能避开大部分新手会踩的坑。另外装完之后记得做一次重启演练——先把 Redis 停掉再启动确认数据还在、配置没丢、服务能正常拉起。这个动作看着简单但真到服务器宕机恢复的时候能帮你省下最宝贵的抢救时间。
返回列表