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

简介: 面试突击 004 | 如何排查 Redis 中的慢查询?视频实战篇

微信图片_20220117193005.jpg


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) 1
   2) (integer) 1581994131
   3) (integer) 6
   4) 1) "set"
      2) "msg"
      3) "xiaoming"
   5) "127.0.0.1:47068"
   6) ""
3) 1) (integer) 0
   2) (integer) 1581994093
   3) (integer) 5
   4) 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 视频


视频内容如下:


QQ图片20220117192959.png

点击查看原视频链接


6 小结


本文我们介绍了慢查询相关的两个重要参数 slowlog-log-slower-than (用于设置慢查询的评定时间) 和 slowlog-max-len 用来配置慢查询日志的最大记录数,然后通过修改 config set slowlog-log-slower-than 0 把所有操作都记录在慢日志进行相关测试。


我们可以使用 slowlog get [n] 查询慢操作日志,使用 slowlog reset 清空慢查询日志。最后给大家一个建议,可以定期检查慢查询日志,及时发现和改进 Redis 运行中不合理的操作。


更多内容,详见视频部分。

相关文章
|
存储 缓存 NoSQL
Redis常见面试题全解析
Redis面试高频考点全解析:从过期删除、内存淘汰策略,到缓存雪崩、击穿、穿透及BigKey问题,深入原理与实战解决方案,助你轻松应对技术挑战,提升系统性能与稳定性。(238字)
|
缓存 NoSQL 关系型数据库
美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?
美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?
美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?
|
数据采集 存储 数据可视化
分布式爬虫框架Scrapy-Redis实战指南
本文介绍如何使用Scrapy-Redis构建分布式爬虫系统,采集携程平台上热门城市的酒店价格与评价信息。通过代理IP、Cookie和User-Agent设置规避反爬策略,实现高效数据抓取。结合价格动态趋势分析,助力酒店业优化市场策略、提升服务质量。技术架构涵盖Scrapy-Redis核心调度、代理中间件及数据解析存储,提供完整的技术路线图与代码示例。
2206 0
分布式爬虫框架Scrapy-Redis实战指南
|
缓存 Java API
Java 面试实操指南与最新技术结合的实战攻略
本指南涵盖Java 17+新特性、Spring Boot 3微服务、响应式编程、容器化部署与数据缓存实操,结合代码案例解析高频面试技术点,助你掌握最新Java技术栈,提升实战能力,轻松应对Java中高级岗位面试。
867 0
|
存储 NoSQL 前端开发
Redis专题-实战篇一-基于Session和Redis实现登录业务
本项目基于SpringBoot实现黑马点评系统,涵盖Session与Redis两种登录方案。通过验证码登录、用户信息存储、拦截器校验等流程,解决集群环境下Session不共享问题,采用Redis替代Session实现数据共享与自动续期,提升系统可扩展性与安全性。
748 3
Redis专题-实战篇一-基于Session和Redis实现登录业务
|
存储 缓存 NoSQL
Redis专题-实战篇二-商户查询缓存
本文介绍了缓存的基本概念、应用场景及实现方式,涵盖Redis缓存设计、缓存更新策略、缓存穿透问题及其解决方案。重点讲解了缓存空对象与布隆过滤器的使用,并通过代码示例演示了商铺查询的缓存优化实践。
544 1
Redis专题-实战篇二-商户查询缓存
|
缓存 监控 NoSQL
Redis 实操要点:Java 最新技术栈的实战解析
本文介绍了基于Spring Boot 3、Redis 7和Lettuce客户端的Redis高级应用实践。内容包括:1)现代Java项目集成Redis的配置方法;2)使用Redisson实现分布式可重入锁与公平锁;3)缓存模式解决方案,包括布隆过滤器防穿透和随机过期时间防雪崩;4)Redis数据结构的高级应用,如HyperLogLog统计UV和GeoHash处理地理位置。文章提供了详细的代码示例,涵盖Redis在分布式系统中的核心应用场景,特别适合需要处理高并发、分布式锁等问题的开发场景。
851 42
|
缓存 NoSQL Java
基于SpringBoot的Redis开发实战教程
Redis在Spring Boot中的应用非常广泛,其高性能和灵活性使其成为构建高效分布式系统的理想选择。通过深入理解本文的内容,您可以更好地利用Redis的特性,为应用程序提供高效的缓存和消息处理能力。
1811 79
|
存储 NoSQL 定位技术
Redis数据类型面试给分情况
Redis常见数据类型包括:string、hash、list、set、zset(有序集合)。此外还包含高级结构如bitmap、hyperloglog、geo。不同场景可选用合适类型,如库存用string,对象存hash,列表用list,去重场景用set,排行用zset,签到用bitmap,统计访问量用hyperloglog,地理位置用geo。
810 5
|
机器学习/深度学习 存储 NoSQL
基于 Flink + Redis 的实时特征工程实战:电商场景动态分桶计数实现
本文介绍了基于 Flink 与 Redis 构建的电商场景下实时特征工程解决方案,重点实现动态分桶计数等复杂特征计算。通过流处理引擎 Flink 实时加工用户行为数据,结合 Redis 高性能存储,满足推荐系统毫秒级特征更新需求。技术架构涵盖状态管理、窗口计算、Redis 数据模型设计及特征服务集成,有效提升模型预测效果与系统吞吐能力。
1568 10