Skip to content

慢查询日志

配置

默认配置

redis
slowlog-log-slower-than 10000  # 超过10000微秒(10ms)记录
slowlog-max-len 128           # 最多保存128条

生产建议

redis
slowlog-log-slower-than 1000  # 1ms
slowlog-max-len 1000          # 保存更多

查看慢查询

redis
SLOWLOG GET 10     # 获取最近10条
SLOWLOG LEN        # 当前数量
SLOWLOG RESET      # 清空

输出格式

1) (integer) 12           # 日志ID
2) (integer) 1603563428   # 时间戳
3) (integer) 1200          # 耗时(微秒)
4) 1) "GET"               # 命令
   2) "user:12345"        # key

分析优化

常见慢原因

  1. O(N)操作:KEYS、SCAN
  2. 大key:HGETALL、LRANGE 0 -1
  3. 慢命令:SORT、SINTER
  4. 数据量:大scan结果

优化方案

redis
-- 替代KEYS
SCAN 0 MATCH user:* COUNT 1000

-- 避免大key
LRANGE list 0 99  # 分页获取

-- 减少慢命令
使用Lua脚本代替多次命令

面试考点

Q: 为什么慢?

  • 复杂命令
  • 大key操作
  • 内存不足swap
  • 网络延迟

Q: 如何优化?

  • 用scan替代keys
  • 拆分大key
  • Pipeline批量
  • 减少网络往返

最后更新: