我一直觉得,Redis 真正难排查的地方,不是“不会命令”,而是信息太散。
内存突然涨了,要看 INFO;怀疑有大 Key,要继续查大小;接口偶尔变慢,又得翻 Slow Log;想确认某个 Hash 里到底有什么,还要再进命令行。
命令都不复杂,但问题一旦混在一起,人就很容易在几个终端窗口之间来回切。
所以我后来更习惯先把 Redis 的整体情况看清楚,再决定下一步敲什么命令。
Redis Insight 对我最有用的地方就在这里:Key、TTL、内存分布、Key 详情、命令执行和慢查询,可以集中在一个界面里看。
它不会替代 redis-cli,但会让排查顺序清楚很多。
先看 Key,比一上来敲命令更容易找到方向
连接 Redis 后,我最常打开的是 Browser。
页面里可以直接看到当前数据库里的 Key、类型、TTL 和大小。Hash、String、List、Sorted Set 混在一起时,这种列表视图尤其直观。
比如看到一批 session:* Key 数量突然很多,或者某些本应该自动过期的 Key 一直没有 TTL,第一轮排查方向基本就有了。
我现在更习惯按这个顺序看:
先看 Key 分布 → 再看 TTL 和大小 → 最后决定要不要继续查内存或慢命令。
这样比一开始就把所有命令都敲一遍省事得多。
点开一个 Key,TTL、字段和值都能直接看
选中某个 Key 后,右侧可以继续查看内部内容。
如果是 Hash,可以直接看到字段和值;如果是 List、Set、Sorted Set,也能按对应结构查看。
这对开发调试很方便。
很多 Redis 问题并不是“Redis 挂了”,而是数据越放越乱:同一个业务前缀下,有的 Key 有 TTL,有的没有;有的对象只有几个字段,有的已经膨胀得很大。
先把结构摊开看清楚,往往比直接猜命令更有效。
真正遇到内存上涨,我最先想知道的是“谁在吃内存”
如果 Redis 内存持续上涨,只知道“总共用了多少”还不够。
更关键的问题是:
到底是哪一类数据、哪一批 Key、哪个业务前缀把内存吃掉了?
Redis Insight 的 Database Analysis 会把数据类型和 Key 的占用情况做成更直观的分析。
这时候 INFO memory 和分析页面的作用就很不一样:
INFO memory更适合告诉我“现在用了多少”;- 分析页面更适合帮我找“内存花到哪里去了”。
实际排查时,我会重点看四件事:
- 哪种数据类型占比突然异常;
- 最大的 Key 是哪些;
- 某个业务前缀是不是明显膨胀;
- 本该过期的数据是不是长期留着。
先把异常对象找出来,再回命令行精确确认,会比从全库一点点扫快很多。
需要敲命令时,Workbench正好接上
Redis Insight 并不是为了让人彻底离开命令行。
我反而觉得它好用的一点是:图形界面负责找方向,Workbench负责做精确确认。
比如已经发现 user:* 这一批 Key 值得继续查,可以直接执行:
SCAN 0 MATCH user:* COUNT 100
需要检查一个 Hash:
HGETALL user
如果要确认界面里的修改是否已经真实写进 Redis,也可以继续用 redis-cli 验证:
redis-cli -h <REDIS_IP> -p 6379 -a <PASSWORD>
SELECT 1
SCAN 0 MATCH user
HGETALL user
继续增加字段:
HSET user age 22 phone 13800138000
HGETALL user
这样一来,界面和命令行不是二选一,而是各做自己更擅长的事。
Redis偶尔变慢,Slow Log比“盯CPU”更值得先看
还有一种情况很常见:Key 看起来没什么异常,内存也没爆,但接口偶尔就是会慢一下。
这时候 Slow Log 很值得看。
Redis 的慢日志会记录超过设定执行时间的命令。Redis Insight 把这些记录直接列出来,不需要每次都手动执行 SLOWLOG GET 再自己整理。
我通常会重点注意:
- 复杂集合操作是不是突然变慢;
- 有没有高复杂度命令被频繁调用;
- 某个大 Key 是否又叠加了慢操作;
- 延迟尖峰出现的时间点和具体命令能不能对应上。
大 Key 和慢命令往往不是两个完全独立的问题。一个集合越大,某些遍历和聚合操作的代价就越高。
所以我更喜欢先从 Key 和内存分析找到可疑对象,再结合 Slow Log 往下追。
Docker部署并不复杂,先把服务跑起来
如果服务器已经有 Docker,Redis Insight 可以直接使用官方镜像启动:
docker run -d \
--name redisinsight \
-p 5540:5540 \
-v redisinsight:/data \
redis/redisinsight:latest
启动后检查容器状态:
docker ps
浏览器访问:
http://服务器IP:5540
这里有一个容易混淆的地方:
5540 是 Redis Insight Web 页面使用的端口;Redis Sentinel 是另一套高可用组件,默认端口是 26379。
两者解决的问题完全不同,不要混在一起配置。
连接 Redis 时,优先走内网地址
进入 Redis Insight 后,添加 Redis 数据库,填写实例地址、端口和认证信息即可。
连接成功后,就可以直接进入 Browser、Workbench、Analysis 等页面。
如果 Redis Insight 和 Redis 在同一台服务器或同一内网,我更建议让它们直接走内网地址。
Redis 默认数据端口是 6379,不要为了远程管理方便,直接把 6379 暴露到公网。
真正需要远程排查时,开放 Redis Insight 的 Web 管理入口更合适。
人不在内网时,我只把 Redis Insight 页面放出去
本地查看没有问题之后,我更关心的是另一个场景:
Redis 真出问题时,我不一定正坐在服务器旁边。
我的做法是让 Redis 继续留在内网,Redis Insight 继续通过内网连接 Redis;需要远程时,只给 Redis Insight 的 5540 Web 页面增加一个公网访问入口。
服务器上安装 cpolar:
sudo curl https://get.cpolar.sh | sh
确认服务状态:
sudo systemctl status cpolar
浏览器进入 cpolar Web UI:
http://服务器IP:9200
创建 HTTP 隧道时,将本地端口指向 Redis Insight 的 5540:
协议:http
本地端口:5540
创建成功后,可以在在线隧道列表中看到公网地址:
在外网浏览器打开这个地址,就能进入 Redis Insight 页面:
如果只是临时排查,随机公网地址就可以完成验证;如果准备长期作为运维入口使用,再配置固定地址和更严格的访问控制。
需要注意的是,Redis Insight 本身具备查看和修改 Redis 数据的能力,所以远程访问时同样要重视认证、Redis ACL/密码和访问范围。
我更愿意把它叫“Redis排查工作台”
Redis Insight 最开始给我的感觉,只是“把 Redis 命令行做成网页”。
真正用下来以后,我觉得这个理解太简单了。
它减少的不是敲命令的次数,而是排查时在不同信息之间来回切换的成本。
Redis 出问题时,最怕的不是不会某条命令,而是:
我知道很多命令,却不知道这一刻应该先看什么。
Redis Insight 的价值就在这里。
先把 Key、TTL、大小、内存分布和慢查询放到眼前,再决定下一步往哪里查;需要精确确认时,再进入 Workbench 或 redis-cli。
对于刚开始接触 Redis 的人,它能降低排查门槛;对于本来就熟悉命令行的人,它也不会取代 redis-cli,而是帮人更快找到下一条该敲的命令。
所以如果让我给它一个更实际的定位,我不会只叫它“Redis 图形客户端”。
我更愿意叫它:
Redis 排查工作台。
当 Redis 真出现内存上涨、Key 异常或者接口变慢时,先把问题看清楚,再下命令,会比一开始就开好几个终端窗口舒服得多。