这是我的第 34 篇原创文章

作者 | 老王(javacn666)

1 面试题

如何排查 Redis 中的慢查询?

2 涉及相关问题

  1. Redis 中有没有慢查询排查工具或者相关排查手段?

  2. 慢查询日志都包含哪些信息?

  3. 慢查询的相关配置项有哪些?默认值是啥?应该如何设置?

  4. 如果慢查询的队列满了?会怎样?

  5. 在代码中如何实现 Redis 的慢查询?

3 答案

首先来说 Redis 中有慢查询日志,是可以实现 Redis 慢操作排查的。

慢日志包含的内容有:

  • 慢查询的具体执行命令;

  • 慢查询的执行时间;

  • 慢查询的执行时长。

慢查询日志内容如下:

127.0.0.1:6379> slowlog get #慢日志查询
1) 1) (integer) 2 #慢日志下标2) (integer) 1581994139 #执行时间3) (integer) 5 #花费时间 (单位微秒)4) 1) "set" #执行的具体命令2) "lang"3) "java"5) "127.0.0.1:47068"6) ""
2) 1) (integer) 12) (integer) 15819941313) (integer) 64) 1) "set"2) "msg"3) "xiaoming"5) "127.0.0.1:47068"6) ""
3) 1) (integer) 02) (integer) 15819940933) (integer) 54) 1) "config"2) "set"3) "slowlog-log-slower-than"4) "0"5) "127.0.0.1:47068"6) ""

慢日志模拟添加,详见视频

慢日志查询相关的配置信息有两个:

  • slowlog-log-slower-than :用于设置慢查询的评定时间,也就是说超过此配置项的命令,将会被当成慢操作记录在慢查询日志中,它执行单位是微秒 (1 秒等于 1000000 微秒);

  • slowlog-max-len :用来配置慢查询日志的最大记录数。

默认值如下:

127.0.0.1:6379> config get slowlog-log-slower-than #慢查询判断时间
1) "slowlog-log-slower-than"
2) "10000"
127.0.0.1:6379> config get slowlog-max-len #慢查询最大记录条数
1) "slowlog-max-len"
2) "128"

可以看出慢查询的临界值是 10000 微秒,默认保存 128 条慢查询记录。

4 代码实战

本文我们使用 Java 来实现慢查询日志的操作,代码如下:

import redis.clients.jedis.Jedis;
import redis.clients.jedis.util.Slowlog;
import utils.JedisUtils;
import java.util.List;
/*** 慢查询*/
public class SlowExample {public static void main(String[] args) {Jedis jedis = JedisUtils.getJedis();// 插入慢查询(因为 slowlog-log-slower-than 设置为 0,所有命令都符合慢操作)jedis.set("db", "java");jedis.set("lang", "java");// 慢查询记录的条数long logLen = jedis.slowlogLen();// 所有慢查询List<Slowlog> list = jedis.slowlogGet();// 循环打印for (Slowlog item : list) {System.out.println("慢查询命令:"+ item.getArgs()+" 执行了:"+item.getExecutionTime()+" 微秒");}// 清空慢查询日志jedis.slowlogReset();}
}

以上代码执行结果如下:

慢查询命令:[SLOWLOG, len] 执行了:1 微秒

慢查询命令:[SET, lang, java] 执行了:2 微秒

慢查询命令:[SET, db, java] 执行了:4 微秒

慢查询命令:[SLOWLOG, reset] 执行了:155 微秒

5 视频

视频内容如下:

6 小结

本文我们介绍了慢查询相关的两个重要参数 slowlog-log-slower-than (用于设置慢查询的评定时间) 和 slowlog-max-len 用来配置慢查询日志的最大记录数,然后通过修改 config set slowlog-log-slower-than 0 把所有操作都记录在慢日志进行相关测试。我们可以使用 slowlog get [n] 查询慢操作日志,使用 slowlog reset 清空慢查询日志。最后给大家一个建议,可以定期检查慢查询日志,及时发现和改进 Redis 运行中不合理的操作。

更多内容,详见视频部分

【END】

近期热文

  • 面试突击 003 | Redis 如何实现查询附近的人?视频实战版

  • 面试突击 002 | Redis 是如何处理已过期元素的?附视频

  • 面试突击 001 | Redis 如何从海量数据中查询出某一个 Key?视频版

  • Java面试详解(2020版):500+ 面试题和核心知识点详解

  • 面试珍藏:最常见的200多道Java面试题(2019年最新版)

关注下方二维码,订阅更多精彩内容

朕已阅 

面试突击 004 | 如何排查 Redis 中的慢查询?视频实战篇相关推荐

  1. 面试突击第 3 期 | Redis 如何实现查询附近的人?视频实战版

    这是我的第 33 篇原创文章 作者 | 王磊 (javacn666) 1 面试问题 Redis 如何实现查询附近的人? 2 相关面试问题 Redis 中如何操作位置信息? GEO 底层是如何实现的? ...

  2. Redis使用场景一,查询出的数据保存到Redis中,下次查询的时候直接从Redis中拿到数据。不用和数据库进行交互。...

    maven使用: <!--redis jar包--><dependency><groupId>redis.clients</groupId><ar ...

  3. redis查看key的过期时间_面试官:你在Redis中设置过带过期时间的Key吗?

    点击上方小伟后端笔记关注公众号 每天阅读Java干货文章 熟悉Redis的同学应该知道,Redis的每个Key都可以设置一个过期时间,当达到过期时间的时候,这个key就会被自动删除. 在为key设置过 ...

  4. redis list设置过期时间_面试官:你在Redis中设置过带过期时间的Key吗?

    点击上方小伟后端笔记关注公众号 每天阅读Java干货文章 熟悉Redis的同学应该知道,Redis的每个Key都可以设置一个过期时间,当达到过期时间的时候,这个key就会被自动删除. 在为key设置过 ...

  5. java面试突击-2022最新迭代redis\mq\springCloud-纯手打

    本博客是本人纯手打然后去网上百度的图片,转发请注明出处 按照自己的理解适合给初级程序员找工作用的 顺便给自己回顾一下,都是按照自己的理解来写的,有的地方不通顺或者不理解可以问我,有写不对的地方或者不同 ...

  6. 分享平面设计中的视觉思维(技巧实战篇)

    好的平面品牌设计一定会有出色的视觉效果.这里分享从视觉思维和视觉传达设计的内涵.概念等方面入手,指出视觉传达设计是视觉思维的过程.就视觉传达设计中视觉思维创新展开论述,从视觉中心.比例与尺度.对比与统 ...

  7. 面试突击 005 | Redis 是如何实现高可用的?它的实现方式有哪些?「视频版」

    这是我的第 35 篇原创文章 作者 | 老王(javacn666) 这部视频的录制.剪辑.做 PPT.写文稿大约花费了 5 个小时的时间,希望这种形式能被更多的人喜欢,希望这篇文章会给你带来更多的价值 ...

  8. 「视频版」当线程池溢出之后,程序会奔溃吗?面试突击 007 期

    哈喽,大家好,我是老王,欢迎来到第 7 期的 Java 面试突击. 本文的面试题是,当线程池的任务溢出之后,程序会奔溃吗? 这个问题问的是关于线程池的任务数超过线程池的承载能力之后,会出现什么情况? ...

  9. HashMap 为什么会导致 CPU 100%?文章看不懂?来看这个视频吧!——面试突击 006 期...

    无论是在实际工作中还是在面试中,HashMap 无疑是使用频率最高的知识点之一,所以我们需要搞懂每一个关于 HashMap 的知识点才行. 哈喽,大家好,我是老王,欢迎来到 Java 面试突击,我们今 ...

最新文章

  1. 嵌入式系统功能需求分析_超市监控系统的功能作用分析
  2. 打算近期去深圳找工作
  3. 【BIM入门实战】Revit 图元分类有哪三种?Revit图元分类图文详解
  4. centos mysql rpm re_centos7和centos6.5环境rpm方式安装mysql5.7和mysql5.6详解
  5. STM32-通用定时器-PWM输出
  6. java jdk包_Java开发工具包JDK的简介
  7. 在linux环境下启动es,linux上Elasticsearch 安装配置、网页访问
  8. [WARNING]考前必读?!
  9. 22计算机408考研—数据结构—图
  10. 利用python爬取飞猪信息_飞猪爬虫项目
  11. 人型自走输入法(网页日语输入法)
  12. D - RGB Triplets(前缀和+思维)
  13. Linux开发板网络直连电脑的设置方法
  14. 电容笔用什么品牌比较好?iPad电容笔测评
  15. 【DL】血与泪的炼丹心得
  16. 京东:按关键字搜索商品 API
  17. MTK开发之cpu核开关与频率调节
  18. 极地漩涡袭美中西部致多人死 芝加哥六成航班取消
  19. [5197——概率趣题:25人每次kill一个谁的存活概率最高]
  20. 生产力、商业价值和敏捷

热门文章

  1. 如何进行防SQL注入?
  2. ×××技术详解(全)
  3. mysql表在线转成分区表_11g普通表在线转换分区表
  4. Prince2与PMP的区别
  5. Hadoop运行任务时一直卡在: INFO mapreduce.Job: Running job
  6. Spring IOC容器-注解的方式【更简化】
  7. cifar10数据集测试有多少张图_pytorch VGG11识别cifar10数据集(训练+预测单张输入图片操作)...
  8. java 过滤器 过滤文件中的文件_Java 使用FileFilter过滤器对文件进行搜索
  9. linux解释名词shell环境,Linux 定时任务
  10. 带有示例的Python date strftime()方法