文章目录
- [第 6 课:Redis 运维 & 排错实战](#第 6 课:Redis 运维 & 排错实战)
-
- 一、排查总原则(先记住)
- [二、场景 1:Redis 连不上(最常见)](#二、场景 1:Redis 连不上(最常见))
-
- [① 先确认 Redis 服务是否在跑](#① 先确认 Redis 服务是否在跑)
- [② 再看端口有没有监听(最关键)](#② 再看端口有没有监听(最关键))
- [③ 用 redis-cli 直连测试](#③ 用 redis-cli 直连测试)
- [④ 看应用连的地址对不对](#④ 看应用连的地址对不对)
- [三、场景 2:systemctl 显示没启动,但 Redis 却能用](#三、场景 2:systemctl 显示没启动,但 Redis 却能用)
- [四、场景 3:6379 端口冲突 / Redis 起不来](#四、场景 3:6379 端口冲突 / Redis 起不来)
- [五、场景 4:Redis 内存突然暴涨](#五、场景 4:Redis 内存突然暴涨)
-
- [① 先看 Redis 用了多少内存](#① 先看 Redis 用了多少内存)
- [② 看 key 数量(危险信号)](#② 看 key 数量(危险信号))
- [③ 排查"大 key / 热 key"(基础版)](#③ 排查“大 key / 热 key”(基础版))
- [六、场景 5:Redis 数据"没了"(新手最慌)](#六、场景 5:Redis 数据“没了”(新手最慌))
-
- 先别慌,先判断是哪种"没了"
-
- [情况 1️⃣ key 过期了(最常见)](#情况 1️⃣ key 过期了(最常见))
- [情况 2️⃣ Redis 重启了(数据没持久化)](#情况 2️⃣ Redis 重启了(数据没持久化))
- [情况 3️⃣ 用的是 Docker,没挂载数据目录](#情况 3️⃣ 用的是 Docker,没挂载数据目录)
- [七、场景 6:本地 Redis / Docker Redis 混乱(高频)](#七、场景 6:本地 Redis / Docker Redis 混乱(高频))
-
- [你一定要搞清楚这 3 件事](#你一定要搞清楚这 3 件事)
- [八、Redis 运维"黄金 10 命令"(直接背)](#八、Redis 运维“黄金 10 命令”(直接背))
- [九、Redis 运维排错 Checklist(照着走)](#九、Redis 运维排错 Checklist(照着走))
- 十、一句话总结(非常重要)
第 6 课:Redis 运维 & 排错实战
目标:
Redis 连不上、端口冲突、Docker/本地混乱、内存异常,都能自己定位
一、排查总原则(先记住)
Redis 出问题,永远按这 4 步走:
服务 → 进程 → 端口 → 连接
顺序不要乱。
二、场景 1:Redis 连不上(最常见)
① 先确认 Redis 服务是否在跑
bash
ps -ef | grep redis | grep -v grep
- ❌ 没有输出 → Redis 没启动
- ✅ 有
redis-server→ 继续
② 再看端口有没有监听(最关键)
bash
ss -lntp | grep 6379
常见情况:
redis-server→ 本地 Redisdocker-proxy→ Docker Redis- ❌ 没输出 → 端口没起来
③ 用 redis-cli 直连测试
bash
redis-cli ping
PONG→ Redis 正常Could not connect→ 配置/网络问题
④ 看应用连的地址对不对
Spring Boot 里常见错误:
yaml
spring:
redis:
host: 127.0.0.1 # 但 Redis 在 Docker 里没映射
👉 Docker Redis 必须 -p 6379:6379
三、场景 2:systemctl 显示没启动,但 Redis 却能用
这是你之前已经遇到过的典型问题。
表现
bash
systemctl status redis
# inactive
但:
bash
redis-cli ping
# PONG
真相(99%)
Docker 里的 Redis 在跑,本地 Redis 已经停了
验证
bash
docker ps | grep redis
ss -lntp | grep 6379
看到 docker-proxy 就对了。
四、场景 3:6379 端口冲突 / Redis 起不来
表现
- Docker Redis 启动失败
- 提示端口占用
排查步骤
bash
ss -lntp | grep 6379
再看进程:
bash
ps -ef | grep redis
解决思路(选一个)
- 方案 A(推荐) :
停本地 Redis → Docker 用 6379
bash
systemctl stop redis
systemctl disable redis
- 方案 B :
Docker Redis 用其他端口
bash
-p 6380:6379
五、场景 4:Redis 内存突然暴涨
① 先看 Redis 用了多少内存
bash
redis-cli info memory
重点看:
text
used_memory_human:1.23G
② 看 key 数量(危险信号)
bash
redis-cli dbsize
key 特别多,说明:
- key 没过期
- 或 key 设计有问题
③ 排查"大 key / 热 key"(基础版)
bash
redis-cli --bigkeys
👉 会告诉你哪些 key 占内存大
六、场景 5:Redis 数据"没了"(新手最慌)
先别慌,先判断是哪种"没了"
情况 1️⃣ key 过期了(最常见)
bash
ttl user:1001
返回 -2 → 已不存在
情况 2️⃣ Redis 重启了(数据没持久化)
bash
redis-cli info server | grep uptime
uptime 很小 → 刚重启
情况 3️⃣ 用的是 Docker,没挂载数据目录
bash
docker inspect redis | grep Mounts -A 5
没看到 /data 映射 → 容器一删数据全没
七、场景 6:本地 Redis / Docker Redis 混乱(高频)
你一定要搞清楚这 3 件事
bash
which redis-server
ps -ef | grep redis
ss -lntp | grep 6379
判断规则:
| 现象 | 说明 |
|---|---|
| docker-proxy | Docker Redis |
| redis-server | 本地 Redis |
| 两个都有 | 混乱(必须清理) |
八、Redis 运维"黄金 10 命令"(直接背)
bash
redis-cli ping
redis-cli info server
redis-cli info memory
redis-cli dbsize
ps -ef | grep redis
ss -lntp | grep 6379
systemctl status redis
docker ps | grep redis
redis-cli config get dir
redis-cli --bigkeys
👉 90% 问题都靠它们解决
九、Redis 运维排错 Checklist(照着走)
- Redis 服务在不在?
- 6379 有没有监听?
- 是本地还是 Docker?
- 应用连的 IP/端口对不对?
- Redis 有没有刚重启?
- 数据有没有过期?
- 有没有挂载数据目录?
十、一句话总结(非常重要)
Redis 排错的核心是:
看进程 → 看端口 → 看连接 → 看数据
只要你不跳步,Redis 很难把你"坑死"。