命令行工具与调试
0. 引言
redis-cli 远不止"敲命令的工具":它内置了监控、诊断、扫描、压测能力,是 Redis 排障的第一利器。本章系统性介绍 redis-cli 的实用模式、SLOWLOG/MONITOR 的定位方法,以及 redis-benchmark 的正确打开方式。
1. redis-cli 交互与连接
bash
redis-cli -h 127.0.0.1 -p 6379 -a password --no-auth-warning
redis-cli -u redis://user:pass@host:port/0
redis-cli --tls --cacert ca.crt --cert client.crt --key client.key # TLS
redis-cli -n 3 # 选择 db 3
redis-cli --raw # 原始输出(中文/二进制友好)
redis-cli -r 3 get key # 重复执行 3 次
redis-cli -i 1 get key # 间隔 1 秒执行2. 监控模式:--stat 与 --latency
bash
# 实时统计(每秒刷新,排障首选)
$ redis-cli --stat
------- data ------ --------------------- load -------------------- - child -
keys mem clients blocked requests connections
1000000 1.2G 50 0 12000000 (+1000) 100bash
# 延迟监控
redis-cli --latency # 持续采样延迟
redis-cli --latency-history # 每 15 秒输出一次历史
redis-cli --latency-dist # 延迟分布直方图
# 内置延迟测试
redis-cli --intrinsic-latency 100 # 本机固有延迟(判断基线)排障流程:先 --intrinsic-latency 排除网络/虚拟机抖动 → --latency 测 Redis 端延迟 → 高延迟再查 SLOWLOG 与命令统计。
3. 数据诊断:--bigkeys 与 --scan
bash
# 扫描大 key(采样,不阻塞)
redis-cli --bigkeys
# 输出示例:最大 string/hash/list/set/zset 前几名及大小
# 安全遍历(配合脚本处理)
redis-cli --scan --pattern "user:*" --count 1000
# 热点 key 排查(LFU 策略下)
redis-cli --hotkeys--bigkeys本质是 SCAN +TYPE/MEMORY USAGE采样,不阻塞,但只统计"采样到的最大";- 精确体检用 Lua 脚本逐 key
MEMORY USAGE(大数据量慎用)。
4. 慢命令定位:SLOWLOG
bash
> slowlog get 10 # 最近 10 条慢命令
1) 1) (integer) 14 # 日志 ID
2) (integer) 1760000000 # 时间戳
3) (integer) 8123 # 耗时微秒(8.1ms)
4) 1) "keys" # 命令
2) "user:*"
5) "127.0.0.1:50000"
6) "lua" # 客户端名(Lua 脚本标记)
> slowlog len # 慢日志条数
> slowlog reset # 清空text
# redis.conf
slowlog-log-slower-than 10000 # 阈值:10ms(微秒)
slowlog-max-len 128注意:SLOWLOG 只记录超过阈值的命令;INFO commandstats 可看所有命令的平均/最大耗时,两者配合定位。
5. MONITOR:全量命令审计(慎用)
bash
> monitor
1760000000.123456 [0 127.0.0.1:50000] "get" "user:1"- MONITOR 实时输出所有命令,会显著拖慢线上性能(高 QPS 实例禁用);
- 只能在低峰/测试环境做短时抓包;
- 7.x 中加入
CLIENT NO-EVICT等保护,但性能代价依旧,替代方案:redis-cli --stat+SLOWLOG+ 应用侧日志。
6. 对象与内存体检
bash
> object encoding key # 内部编码
> object refcount key # 引用计数
> object idletime key # 空闲秒数(LRU 视角)
> object freq key # 访问频率(LFU 视角)
> memory usage key # 单 key 内存(含 overhead)
> memory stats # 内存分配器统计
> memory doctor # 内存健康诊断建议
> memory purge # 手动整理(阻塞,慎用)7. redis-benchmark 压测
bash
# 基础压测:100 并发 × 10 万请求
redis-benchmark -h 127.0.0.1 -p 6379 -c 100 -n 100000 -t set,get,incr
# 指定 key 大小与 pipeline
redis-benchmark -t set -d 1024 # 1KB value
redis-benchmark -t set -P 16 # pipeline 16
# 输出解读
====== SET ======
100000 requests completed in 1.23 seconds
50 parallel clients
3 bytes payload
Requests per second: 81300.81 # QPS
Transfer rate: 0.24 MB/sec
Latency summary (msec):
avg: 0.615 max: 8.123压测要点:
- 压测机与 Redis 分离部署(否则结果失真);
- 先
--intrinsic-latency确认基线; - 对比不同
-c(并发)与-P(pipeline)下的曲线,找拐点; - 关注 p99/p99.9 而非平均值(
--latency与 percentile 输出)。
8. 排障流程速查
图表渲染中…
9. 小结
- redis-cli 是集**连接、监控(--stat/--latency)、诊断(--bigkeys/--hotkeys)、审计(SLOWLOG)、抓包(MONITOR)**于一体的瑞士军刀;
- 慢命令定位三板斧:
SLOWLOG+INFO commandstats+OBJECT体检; - 压测用 redis-benchmark 但注意环境隔离与指标解读;
- 生产上 MONITOR/KEYS/DEBUG 等命令严格限制使用。
下一章讲解 Info 指令与监控体系:从 INFO 输出到可观测性建设。