{T}

命令行工具与调试

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)    100
bash
# 延迟监控
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

压测要点

  1. 压测机与 Redis 分离部署(否则结果失真);
  2. --intrinsic-latency 确认基线;
  3. 对比不同 -c(并发)与 -P(pipeline)下的曲线,找拐点;
  4. 关注 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 输出到可观测性建设。