ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Redis启动全攻略:从配置文件到Docker主从哨兵集群

Redis启动全攻略:从配置文件到Docker主从哨兵集群 有人觉得启动 Redis 就是敲个redis-server回车最多加个后台运行。真到生产环境踩过坑之后才知道启动方式这事牵扯到配置加载、守护进程、权限、持久化恢复、Docker 网络、主从节点顺序……随便一个环节不对服务要么起不来要么起来了连不上要么你以为在跑其实随时会挂。这篇文章就把 Redis 启动这件事从头到尾揉碎了讲清楚覆盖 Linux 裸机、Windows、Docker、systemd 自启、主从哨兵集群等场景也会把启动时最常见的报错和排查思路列出来。不管你是刚接触 Redis 的新手还是被线上启动问题折腾过的运维应该都能找到参考价值。1. 先搞清楚 Redis 启动的本质一个进程三种姿势启动 Redis 看着是运行一个程序但背后涉及的是以什么身份、读哪份配置、是否脱离终端、如何被守护这几件事。我见过不少同事把启动方式混为一谈导致调试半天查不出问题所以先把这个底层的逻辑理清楚。1.1 前台启动几乎只用于调试直接执行redis-server不带任何参数的方式就是前台启动。所谓前台就是进程占用当前终端日志直接往标准输出上打一旦你按CtrlCRedis 就立刻退出。这个方式下Redis 会使用内置的默认配置监听127.0.0.1:6379没有密码没有持久化save策略默认也会生效但 RDB 文件名、目录都是默认值。前台启动的最大优点是日志实时可见出问题能马上看到报错缺点也很致命——终端一关服务就死而且不能同时做其他操作。所以我的建议是只在第一次验证安装是否成功、或者排查启动崩溃原因时用前台启动。比如你怀疑配置写错了敲redis-server /etc/redis/redis.conf前台起一下日志会直接告诉你哪一行配置有问题。一旦确认没问题立刻切到后台方式。实时看日志这事很多人会用redis-server配合nohup但其实有更正规的后台启动机制下面接着说。1.2 后台启动 daemonize yesRedis 自己支持守护进程模式配置项叫daemonize。默认是no也就是前台。你可以在命令行里临时指定redis-server --daemonize yes也可以在配置文件中写daemonize yes然后用配置文件启动redis-server /etc/redis.conf这个模式下Redis 启动后会 fork 一个子进程父进程退出子进程脱离终端在后台运行。这时你的终端不会被占用CtrlC也杀不掉它需要用redis-cli shutdown或kill来停止。这里有个重要细节即使设置了daemonize yesRedis 启动时打印的日志依然会先出现在终端上直到 fork 完成之后终端才被释放。很多人第一次用这个方式以为卡住了其实是正常的。另外守护进程模式下的日志不再是标准输出而是写到配置文件里logfile指定的路径默认是空字符串也就是输出到/dev/null。所以如果你设置了守护进程但logfile没配你会发现服务在跑但什么都查不到日志这个坑特别隐蔽。后面我会专门讲日志配置。1.3 配置文件启动生产标配Redis 的所有启动参数都可以在命令行上用--key value的方式覆盖但真正规范的做法是使用配置文件启动。生产环境里的 Redis 往往涉及几十个参数端口、绑定地址、密码、持久化策略、内存上限、慢日志阈值、主从复制信息……全塞在命令行里既不现实也不可维护而且进程重启后如果没有脚本或 systemd 帮你重新拼接参数非常容易漏项。配置文件启动的命令很简单# 使用默认源码目录下的配置 redis-server /path/to/redis.conf # 也可以临时覆盖某个配置项 redis-server /path/to/redis.conf --port 6380 --requirepass yourpass配置文件内部是指令 参数的键值对格式比如port 6380、bind 0.0.0.0井号开头是注释。Redis 启动时会逐行解析遇到非法指令会直接报错退出——这点比很多宽松语法的软件更严格但也意味着你配置里写错一个单词服务就起不来不过日志会明确告诉你第几行有问题算是好事。另外请注意Redis 的配置文件加载顺序是命令行参数 配置文件内参数 内置默认值。如果你在命令行里显式指定了--port 6380即使配置文件里写的是6379最终也会用6380。这个逻辑很重要因为有时候你改了配置文件重启服务却发现端口没变大概率是启动脚本里带了命令行参数覆盖了配置。2. 不同环境下的启动实操同样是启动 Redis在 Linux 编译安装、Windows 开发机、Docker 容器里完全是不同的玩法。我按环境来拆解每种环境都给可以直接照做的步骤和注意点。2.1 本机直接编译安装后的启动Linux从官网下载源码包编译安装是最原教旨也最可控的启动方式。步骤大致是# 下载源码示例是 7.0.x具体版本看官网建议选稳定版 wget https://download.redis.io/releases/redis-7.0.11.tar.gz tar -zxvf redis-7.0.11.tar.gz cd redis-7.0.11 make编译完成后默认情况下可执行文件在src/目录下其中redis-server是服务端redis-cli是客户端工具。想要全局可用可以执行sudo make install这个命令会把redis-server、redis-cli等二进制文件复制到/usr/local/bin/下之后直接敲命令就能用。启动前的三件事创建独立的运行用户不推荐直接用 root 启动Redis 官方也在配置里默认注释了user nobody之类但我个人习惯为 Redis 单独建一个系统用户权限隔离更安全sudo adduser --system --group redis准备配置、日志、数据目录sudo mkdir -p /etc/redis /var/log/redis /var/lib/redis sudo cp redis.conf /etc/redis/6379.conf sudo chown -R redis:redis /var/log/redis /var/lib/redis修改配置必要项至少把daemonize yes、logfile /var/log/redis/6379.log、dir /var/lib/redis配上。之后启动就很简单sudo -u redis redis-server /etc/redis/6379.conf然后验证redis-cli ping # 返回 PONG 就说明在跑了这里我特别想强调一个经验编译安装的 Redis默认配置里bind是127.0.0.1 -::1protected-mode是yes。也就是说如果你不改配置外部机器根本连不上这是安全设计。但如果你的场景需要局域网内其他服务器连接务必显式修改bind和protected-mode并且设置requirepass。千万别图省事只把protected-mode改成no那是把自己裸奔出门。2.2 Windows 下的启动别被官方没有 Windows 版劝退Redis 官方并不直接提供 Windows 版本但微软曾经维护过一个移植分支后来慢慢停止更新了。现在主流的选择有两个tporadowski/redis知名的 Windows 原生移植版本支持到 Redis 5.0.14适合快速本地开发、学习。WSL2 / Docker Desktop在 Windows 上跑一个 Linux 容器或 WSL 发行版再按 Linux 方式装虽然多套了一层虚拟化但版本新、行为最接近生产环境。如果是做 Java、Python 等后端开发图的就是本地快我一般建议直接用原生 Windows 版。下载方式就是 GitHub 上搜redis-windows或tporadowski/redis的 Release拿到的压缩包里就有redis-server.exe和redis-cli.exe。Windows 下的启动方式跟 Linux 很像# 前台启动 redis-server.exe # 指定配置启动 redis-server.exe redis.windows.conf但因为 Windows 没有守护进程的概念启动后关掉命令行窗口服务就停了。所以很多本地开发者会把 Redis 注册成 Windows 服务这样开机自启、后台运行省心很多。注册方式携带/install参数redis-server.exe --service-install redis.windows.conf --service-name Redis redis-server.exe --service-start --service-name Redis停止服务用--service-stop --service-name Redis卸载服务用--service-uninstall --service-name Redis。注意旧版本的 Windows Redis 服务注册有个大坑配置文件里的daemonize yes在 Windows 服务模式下会导致服务起不来因为服务管理器本来就要求进程在前台运行。如果你用的是老版本记得把daemonize设为no。新版一般会自动忽略但为了保险起见明确写入no最稳。另外Windows 版 Redis 默认没有logfile日志会直接输出到窗口。注册成服务后看不到窗口日志建议在配置里设置logfile redis.log这样出问题了至少有文件可查。2.3 用 Docker 启动 Redis 及主从容器化已经是现在部署的主流Docker 启动 Redis 最简洁的方式# 直接跑一个最新稳定版 docker run -d --name redis -p 6379:6379 redis:7.2这条命令的底层逻辑从 Docker Hub 拉取redis:7.2镜像默认以后台模式运行容器名redis把宿主机的6379映射到容器的6379。这种启动方式适合开发测试但配置文件和数据目录都没有挂出来容器一删数据就没了持久化文件也看不到。规范一点的启动方式要把配置文件和数据目录都挂载到宿主机docker run -d --name redis \ -p 6379:6379 \ -v /opt/redis/conf:/etc/redis \ -v /opt/redis/data:/data \ --restartalways \ redis:7.2 \ redis-server /etc/redis/redis.conf这里有几个细节-v /opt/redis/conf:/etc/redis是把宿主机配置目录挂进容器容器里的 Redis 启动时读取的是/etc/redis/redis.conf。注意目录挂载不会自动创建文件你需要提前准备好配置文件。-v /opt/redis/data:/data挂的是 RDB/AOF 持久化文件目录对应配置里的dir /data。--restartalways让 Docker 守护进程在容器退出后自动拉起相当于实现了开机自启崩溃重启。如果配置里设置了daemonize yes在容器里反而会有问题Docker 容器要求主进程在前台运行否则容器会直接退出。所以容器内 Redis 配置必须保持daemonize no。这个坑很多人踩过记住就好。再说说Docker 部署 Redis 主从。简化模型就是两个容器# 主节点 docker run -d --name redis-master -p 6379:6379 redis:7.2 # 从节点 docker run -d --name redis-slave -p 6380:6379 \ redis:7.2 redis-server --replicaof 宿主机IP 6379注意在 Docker 里--replicaof不能写localhost或127.0.0.1因为两个容器的127.0.0.1各自独立必须写宿主机 IP 或者走自定义 Docker 网络里的容器名。更稳妥的做法是先创建一个网络docker network create redis-net docker run -d --name redis-master --network redis-net -p 6379:6379 redis:7.2 docker run -d --name redis-slave --network redis-net -p 6380:6379 \ redis:7.2 redis-server --replicaof redis-master 6379这样从节点可以通过容器名redis-master解析到主节点地址不需要关心 IP 变化。验证主从是否生效连接到从节点执行redis-cli -p 6380 info replication注意role:slave以及master_link_status:up这两个字段。启动顺序上主从没有严格的必须先主后从要求但从节点启动时可以第一时间触发全量同步如果主节点数据量很大建议在业务低峰期做从节点扩容。2.4 开机自启与 systemd 服务配置裸机部署下Redis 进程不能靠手动 ssh 上去敲命令来维持系统重启后必须自动拉起。CentOS 7 / Ubuntu 16 都使用 systemd配置一个 Redis 服务单元文件是关键。最简单的方式sudo systemctl enable redis sudo systemctl start redis前提是你已经装了 Redis 对应的 systemd 单元文件。有些发行版比如 Ubuntu 的apt install redis-server会自动装好/lib/systemd/system/redis-server.service你只需要改配置文件路径和参数。源码编译安装的话需要自己写一个[Unit] DescriptionRedis Server Afternetwork.target [Service] Typeforking ExecStart/usr/local/bin/redis-server /etc/redis/6379.conf ExecStop/usr/local/bin/redis-cli shutdown Restartalways Userredis Groupredis PIDFile/run/redis/redis_6379.pid RuntimeDirectoryredis RuntimeDirectoryMode0755 [Install] WantedBymulti-user.target这里我解释几个容易出错的地方Typeforking因为 Redis 配置了daemonize yes主进程会 fork 一个后台子进程后退出systemd 需要知道这个行为所以用Typeforking并且配合PIDFile告诉 systemd 去哪个 pid 文件找实际运行的进程。如果你的 Redis 配置是daemonize no比如容器场景就应该用Typesimple。ExecStop直接调redis-cli shutdown可以优雅退出避免直接 kill 导致 AOF 未落盘。如果配置了密码需要改成redis-cli -a 密码 shutdown但这样密码会暴露在命令行里更好的做法是用redis-cli --no-auth-warning -a 密码 shutdown并处理好权限。更安全的做法是让 systemd 读取配置文件里的密码或者只允许本机访问。Restartalways会让 Redis 崩溃后自动重启建议配合 systemd 的StartLimitIntervalSec和StartLimitBurst控制重启频率防止秒崩秒重启死循环。配置好后sudo systemctl daemon-reload sudo systemctl enable redis sudo systemctl start redis systemctl status redis如果状态不是active (running)就执行journalctl -u redis看日志。注意systemd 的日志和 Redis 自己的logfile是两套东西如果你在配置里指定了 Redis 日志文件systemd 的 journal 里只会记录 systemd 启动日志真正的 Redis 运行日志还是得去/var/log/redis/下看。3. 启动过程常见坑与排查这里我列几个我实际踩过、也帮别人排查过的高频问题。启动失败不可怕可怕的是不知道从哪看日志、不知道每条提示是什么意思。3.1 端口被占用、bind 配置错误报错示例Creating Server TCP listening socket *:6379: bind: Address already in use说明 6379 端口已经被占用。最常见的原因是之前启动的 Redis 还活着你又执行了一次redis-server。解决办法是先用redis-cli ping看是不是老实例在跑或者在系统层看端口ss -tlnp | grep 6379 lsof -i:6379如果确定没有用的进程占用但还是报错有可能是使用了SO_REUSEADDR相关的系统配置问题但极少见。另一个容易忽略的报错是Warning: Could not create server TCP listening socket *:6379: bind: Cannot assign requested address这种一般是你把bind配成了一个本机不存在的 IP比如bind 192.168.1.100但服务器的实际网卡 IP 不是这个。Redis 启动时会尝试监听该地址失败后直接退出。排查思路很简单用ip addr确认本机 IP确保bind的地址是本机的、或者用0.0.0.0表示监听所有网卡。3.2 日志怎么看slowlog、启动日志启动日志是最直观的诊断依据。Redis 的日志级别有debug、verbose、notice、warning启动时只会输出verbose以上的日志。如果遇到启动失败配置里临时把loglevel改成debug再前台启动可以看到非常详细的信息包括每个配置文件路径、加载了多少配置、是否开启集群、要绑定哪些地址等等。我一般用这样的组合拳排查启动问题先去配置里把logfile指向一个明确路径比如/tmp/redis-start.log。然后前台模式跑redis-server /etc/redis/6379.conf这样终端和日志文件都能看到输出。如果服务已经起来但表现异常用redis-cli info、redis-cli config get loglevel查看运行状态。慢日志的话是另一码事SLOWLOG GET看的是执行超时的命令跟启动没关系但经常被人混为一谈。启动日志里的Config file loaded后面的内容往往是关键线索多留心。3.3 权限、目录、持久化文件导致启动失败Redis 启动时如果遇到数据目录不可写会直接报错并退出。尤其是用 systemd 指定了Userredis之后如果/var/lib/redis的属主还是root就会变成这样Cant chmod ... Cant open the log file: Permission denied排查方式一句话确保 Redis 运行用户对dir配置的目录、logfile所在的目录、以及 pid 文件目录拥有写权限。用ls -ld /var/lib/redis /var/log/redis /var/run/redis逐一看属主和权限。另一个跟持久化相关的经典问题机器突然断电后重启 Redis出现Bad file format reading the appendonly file。这说明 AOF 文件尾部有损坏。Redis 提供了redis-check-aof --fix appendonly.aof工具来修复。但注意这个操作会去掉文件最后的非法部分可能丢失最后几条命令所以最好先备份原文件再修复。RDB 文件也有类似工具redis-check-rdb dump.rdb。我看到过不少人在启动失败时反复删appendonly.aof和dump.rdb这样确实能让 Redis 起来但数据也全没了。不到万不得已别删持久化文件先备份再尝试修复。如果修复都不行才考虑用--appendonly no方式临时启动导出数据最后再做全量重建。3.4 最高频的拒绝连接问题启动明明成功但客户端连接被拒绝。redis-cli ping报Could not connect to Redis at 127.0.0.1:6379: Connection refused第一种情况Redis 压根没起来或者起来后立刻崩溃。运行ps -ef | grep redis检查进程再用日志确认原因。第二种情况Redis 起来了但监听在别的端口或地址。比如你配置文件里写了port 6380然后用redis-cli不加-p默认连 6379自然是拒绝。用redis-cli -p 6380 ping才能测通。第三种情况最容易被绕进去的——Redis 只绑定了127.0.0.1你在另一台机器上用宿主机 IP 访问被拒绝。这种情况不算连接拒绝而是超时或Connection refused因网络策略而异。配置bind 0.0.0.0后就能收到连接请求但这时候千万别忘了设密码和防火墙策略。第四种情况开启了protected-mode yes且没有配置密码并且你通过远程 IP 访问。Redis 会直接拒绝外部连接并给出提示。解决方案就是设置requirepass。我见过最离奇的场景是redis-server已经在跑redis-cli -h 127.0.0.1也能PONG但同一个机器上的 Java 应用就是连接失败。后来发现问题出在防火墙把 6379 端口的入站连接受限localhost 走 loopback 绕过防火墙而 Java 连的是宿主机的内网 IP。这种问题就要查防火墙和网络策略别光盯着 Redis 配置。4. 结合运维场景谈启动方式选型启动方式不是随便选的它跟你的部署架构、运行环境、高可用要求强相关。我按场景给出常见的选型建议和最佳实践。4.1 单机开发、测试、生产各自选哪种如果你只是在自己电脑上写代码、做本地缓存redis-server --daemonize yes或者 Windows 服务模式都行怎么方便怎么来。但有一点本地实例也尽量指定一个明确的配置文件一来方便换端口、设密码二来模拟生产环境的启动逻辑避免在本地一切正常、到了服务器上全跑不通。测试环境往往需要模拟生产我会在测试机上用 systemd 方式部署但会单独使用测试配置比如增加maxmemory 512mb、maxmemory-policy allkeys-lru来模拟真实场景下的淘汰策略。测试环境重启时Redis 最需要关注的是持久化恢复速度如果开启了 AOF启动时会先加载 AOF 文件文件巨大时会阻塞启动流程很久。这时候需要评估是关闭 AOF、缩短rewrite周期还是用主从切换来减少冷启动影响。生产环境的选择基本是systemd 配置文件 独立用户 持久化 监控告警。启动只是第一步关键是让 Redis 以可控的方式被拉起、被重启、被观测。启动命令应该固化到配置中不要靠人工击键。另外生产环境建议在redis.conf里开启supervised systemd这样 Redis 会主动通知 systemd我准备好了避免 systemd 以为进程未启动。设置了这个之后systemd 单元文件里的Type可以改成notify但需要 Redis 和 systemd 的配合没有把握时保持Typeforking最保险。4.2 主从、哨兵、集群架构下的启动顺序与要点主从复制的启动相对简单先启动主节点再启动从节点是直觉做法因为从节点启动后会尝试连接主节点发起PSYNC。如果先启动从、后启动主从节点会不断重连主节点启动后也能自动建立复制。所以实际上没有严格顺序但为了避免无意义的网络重试先主后从更合理。哨兵模式下启动顺序更讲究一些。哨兵redis-sentinel本质上是另一个 Redis 进程只是启动方式不同redis-sentinel /etc/redis/sentinel.conf也可以用redis-server /etc/redis/sentinel.conf --sentinel哨兵之间没有主次之分它们是相互协作的一组进程监控主节点和从节点的状态。启动哨兵的几个关键点哨兵配置文件里必须写sentinel monitor master-name host port quorum否则无法工作。host必须是主节点实际可访问的地址写localhost会让其他机器上的哨兵认不出来。通常部署奇数个哨兵至少 3 个避免脑裂时无法达成多数票决定故障转移。哨兵进程需要daemonize yes并且配置自己的日志因为故障转移期间的日志非常重要。启动顺序建议是主节点 → 从节点 → 哨兵。哨兵启动后观察info sentinel看到sentinel_ok表示监控成功。如果报-sdown检查网络和防火墙。Redis Cluster集群模式的启动则更复杂一点。每个节点都以cluster-enabled yes启动然后通过redis-cli --cluster create把多个节点组织成集群。启动阶段常见的坑是配置文件里忘了开cluster-enabled yes节点以普通模式启动后面创建集群会失败。集群节点固定占用两端口port指定的客户端端口以及port 10000的集群总线端口。防火墙只放行前者会导致集群节点之间无法通信从节点连接时一直报-CLUSTERDOWN。每个集群节点必须有唯一的cluster-config-file默认是nodes.conf如果多个节点共享同一个数据目录会互相覆盖配置导致集群状态错乱。所以集群模式下启动前最好先手动规划节点 ID、端口、目录把配置模板准备好避免启动一堆实例后才发现他们的nodes.conf互相冲突。4.3 关于可视化客户端启动的误会很多初学者会把启动 Redis和打开可视化工具混在一起。像 Redis Desktop Manager、Another Redis Desktop Manager 这类图形客户端它们本身不负责启动 Redis 服务端而是连接到已经运行中的 Redis 实例。所以正确路径永远是先把 Redis 服务端按要求启动起来确认能redis-cli ping通再去可视化工具里填 IP、端口、密码。如果连接不上不要只在图形界面上反复重试老老实实回到命令行和日志来排查。我遇到太多人把连接工具连不上当成Redis 启动方式错了最后发现只是密码多了个空格或者端口填错。还有一个常见的场景是用可视化工具连接 Docker 里的 Redis。这时候你要映射宿主机端口到容器端口并且注意容器内 Redis 的bind配置。官方镜像的默认配置允许任意 IP 访问其实不是redis:7.2镜像的默认配置带有bind 127.0.0.1但 Docker 容器里你映射端口时访问的是宿主机 IP所以如果你没显式覆盖--bind 0.0.0.0外部工具连接会失败。最稳妥的 Docker 启动命令直接加参数docker run -d --name redis \ -p 6379:6379 \ redis-server --bind 0.0.0.0 --requirepass 123456然后可视化工具连接宿主机的6379端口填密码123456就能连通。开发环境用用没问题生产环境一定要用配置文件和防火墙配合管理。5. 启动方式与 Redis 的持久化、缓存治理的关系启动方式牵扯出来的不只是怎么跑起来还直接影响 Redis 的持久化行为、缓存治理方案以及后续运维的便利性。这部分我把启动相关的几个周边问题一并说透。5.1 启动时的持久化恢复策略Redis 启动时会自动加载持久化文件加载顺序随配置不同而不同。默认情况下如果同时存在 RDB 和 AOFRedis 会优先加载 AOF 文件因为 AOF 的日志更完整、数据更新。如果你的启动配置里appendonly yes但 AOF 文件不存在Redis 会检查 RDB 文件如果 RDB 存在则加载 RDB 恢复数据之后通过后台重写生成 AOF。这中间的微妙之处在于dir配置指向的目录里如果有旧的dump.rdb启动时会自动恢复旧数据。很多新手刚配置好 Redis发现我没写数据怎么有 key其实就是之前的 RDB 残留。如果 AOF 文件损坏启动会直接失败不会退而求其次去加载 RDB这点一定要警惕。我前面提到过用redis-check-aof --fix修复但修复后的数据可能不是最新的需要结合备份判断可接受程度。如果 AOF 文件很大启动加载耗时可能很长。Redis 为了在加载期间不响应客户端会在日志里打印类似Reading RDB base file、DB loaded from append only file: 10.5 seconds这样的信息。启动时间本身也是健康度指标如果你发现启动要几十秒就该考虑 AOF rewrite 和控制 AOF 文件大小了。5.2 启动参数与缓存治理缓存治理常说缓存穿透、缓存击穿、缓存雪崩这些话题看起来跟启动方式无关但启动时的配置选择直接决定了治理手段能不能落地。比如为了防止缓存雪崩你会给缓存 key 设置随机过期时间。但前提是 Redis 本身稳定可用如果 Redis 启动时maxmemory 0无上限也不设置淘汰策略内存持续增长最终触发 OOMOS 可能直接杀掉进程然后靠 systemd 重启拉起来但数据可能已经丢失。这就是典型的启动时没想清楚内存治理的后果。所以我建议在启动配置里就固定好内存上限和行为maxmemory 4gb maxmemory-policy allkeys-lru这样在内存不足时不会直接崩溃而是按 LRU 淘汰 key。类似地cache miss治理依赖 Redis 的命中率统计这些统计信息从进程启动就开始累积redis-cli info stats里的keyspace_hits、keyspace_misses都是自启动以来累计的。如果你经常手动重启 Redis统计会清零监控告警的基线需要重新对齐这也是启动方式对运维治理的间接影响。5.3 启动与 Redis 数据类型、常用命令的关系启动后你要验证 Redis 是否正常最少要会用几个常用命令。很多刚接触 Redis 的人对数据类型没概念我简单串一下启动后连接 Redisredis-cli -h 127.0.0.1 -p 6379 -a 密码如果当时没设密码就不用-a。注意新版redis-cli带密码会提示 warning可接受或加--no-auth-warning最常用的验证命令PING返回PONG表示服务正常。INFO查看服务端信息包括版本、角色、内存、持久化状态、复制状态。启动后第一件事就看INFO server和INFO persistence。DBSIZE查看当前库有多少 key。CONFIG GET *查看实际生效的配置尤其适合确认你通过命令行临时传的参数是否被加载。SET/GET为某个 key 写入和读取字符串值顺带测试写入持久化文件的能力。数据类型层面Redis 有 String、Hash、List、Set、ZSet 五种基础类型。启动后你可以用TYPE key查看某个 key 的类型。很多分布式锁的实现用的就是 Set 命令的NX和EX参数例如SET lock_key token NX EX 30这套指令要生效前提就是 Redis 进程稳定运行。而看 Redis 是否稳定运行的第一步就是确认它的启动方式没有隐患。比如你用命令行参数临时启动、又没有守护进程一个无意的终端关闭就可能让分布式锁的所有请求瞬间全部失败。所以分布式锁、队列等强依赖 Redis 的功能对启动方式的稳定性和可恢复性要求极高这也是为什么我强调生产环境必须用 systemd / 服务化方式管理而不是随手redis-server 。6. 我的一点实操体会从我自己折腾 Redis 的经历来看启动方式这个题目看起来每个搞过 Redis 的人都能说两句但真正把它做扎实需要你把配置、权限、日志、持久化、进程守护、网络这些问题串起来看。我建议所有刚接触 Redis 的朋友别急着去背数据类型和命令先把redis-server、redis-cli、redis.conf这几个角色的关系搞清楚。在本地多试几种启动姿势——前台、守护进程、配置文件、systemd、Docker——每种都亲手启动一次、停止一次、看一次日志踩过坑之后你才算真的入门。最后分享一个小技巧不管你在哪个环境启动 Redis都养成启动后 5 秒内验证三件事的习惯——redis-cli ping是否PONG、INFO persistence是否正常、日志里有没有 WARNING。这三件事都确认了再往下做业务开发。这套习惯帮我省了数不清的线上排查时间也希望对你适用。
返回列表