Redis慢查询日志概述

Redis慢查询日志是一个记录超过指定执行时间的查询的系统。 这里的执行时间不包括IO操作,比如与客户端通信,发送回复等等,而只是实际执行命令所需的时间(这是唯一在命令执行过程中线程被阻塞且不能同时处理其他请求的阶段)。

Redis 执行生命周期

我们的 慢查询 是在第三个步骤,慢查询是记录执行命令的时间。客户发送命令,排队这些都不含在慢查询的时间内,仅仅只记录执行命令耗费的时间。有时候我们分析客户端超时的时候,不一定是慢查询,有可能第一个阶段和第四个阶段出现超时,但是有慢查询是客户端超时的其中一个原因。

慢查询的配置参数
slowlog-max-len
slowlog-log-slower-than

slowlog-max-len

slowlog-max-len 是慢查询日志的长度。实际上,Redis使用了一个列表来存储慢查询日志。Redis 使用了一个List 实现了一个先进先出的队列。当 第三阶段 执行的命令符合慢查询设置的时间,那么这个命令就会被插入到这个队列当中。这个 List 是一个固定的长度,其次是保存在内存当中。

slowlog-log-slower-than

slowlog-log-slower-than就是那个预设阈值,它的单位是微秒(1秒=1000毫秒=1000000微秒),默认值10000。slowlog-log-slower-than 告诉Redis命令的执行时间超过多少微秒将会被记录。 请注意,使用负数将会关闭慢查询日志,而值为0将强制记录每一个命令。
也就是 slowlog-log-slower-than=0,那么系统会记录所有的命令;如果slowlog-log-slower-than<0,那么对任何命令都不会记录。

查看当前系统此参数的配置

127.0.0.1:6379> config get slowlog-max-len
1) "slowlog-max-len"
2) "128"
127.0.0.1:6379> config get slowlog-log-slower-than
1) "slowlog-log-slower-than"
2) "10000"
127.0.0.1:6379>

由此可知:系统默认 slowlog-max-len 的长度是 128,slowlog-log-slower-than 阈值是:10000 微秒。相当于 10 毫秒。

配置方法

修改配置文件重启(不推荐)

因为 慢查询 是基于内存的,一旦重启后,里面的数据将会丢失。除非刚刚开始安装的时候就在配置文件中配置好。
找到我们的 Redis 配置文件: redis.conf,打开该文件,修改他们的值后,然后重启。

slowlog-log-slower-than 10000
slowlog-max-len 128

动态配置(推荐)

config set slowlog-max-len 500
config set slowlog-log-slower-than 5000

127.0.0.1:6379> config set slowlog-max-len 500
OK
127.0.0.1:6379> config set slowlog-log-slower-than 5000
OK
127.0.0.1:6379> config get slowlog-max-len
1) "slowlog-max-len"
2) "500"
127.0.0.1:6379> config get slowlog-log-slower-than
1) "slowlog-log-slower-than"
2) "5000"

慢查询的命令

读取慢查询日志
请使用SLOWLOG GET命令,此命令返回慢查询日志中的每一个条目。 可以只返回最近的N个条目,通过给命令传入一个额外的参数(例如:SLOWLOG GET 10)。

redis 127.0.0.1:6379> slowlog get 2
1) 1) (integer) 14
  2) (integer) 1309448221
  3) (integer) 15
  4) 1) "ping"
2) 1) (integer) 13
  2) (integer) 1309448128
  3) (integer) 30
  4) 1) "slowlog"
    2) "get"
    3) "100"

每一个条目由四个字段组成:

1:每个慢查询条目的唯一的递增标识符。
2:处理记录命令的unix时间戳。
3:命令执行所需的总时间,以微秒为单位。
4:组成该命令的参数的数组。

条目的唯一ID可以用于避免慢查询条目被多次处理(例如,你也许有一个脚本使用每个新的慢查询日志条目给你发送报警邮件)。

条目ID在Redis服务器运行期间绝不会被重置,仅在Redis服务重启才重置它。

获取慢查询日志的当前长度
使用命令SLOWLOG LEN可以获得慢查询日志的长度。

127.0.0.1:6379> slowlog len
(integer) 0

重置慢查询日志
你可以使用命令SLOWLOG RESET来重置慢查询日志。

删除后,信息将永远丢失。

127.0.0.1:6379> slowlog reset
OK

慢查询 推荐 参数设置
slowlog-max-len 默认是128,不要设置过小,通常设置 1000。
slowlog-log-slower-than 默认是10毫秒, 我们知道redis 是基于内存的,内存的速度特别快,因此这里推荐设置1毫秒。
定期做 慢查询 的持久化。我们知道 慢查询是先进先出的,因此当数量到达一定的长度,会有一些慢查询会丢失。因此定期 将慢查询 持久化到 数据库,方便我们日后分析。

posted @ 2022-01-19 21:52 11014p 阅读(763) 评论(0) 推荐(1) 编辑
摘要: todo 阅读全文
posted @ 2022-01-19 21:43 11014p 阅读(59) 评论(0) 推荐(0) 编辑
摘要: 环境依赖: Spring Boot:1.5.9 JDK:1.8.0 MySQL:5.7.17 Mybatis:3.3.0 本文主要就mybatis的多数据源切换和动态数据源加载的实现原理做分享;对于mybatis的基础可自行百度。由于在开始学习的时候,发现网上有很多人把多数据源切换和动态数据源加载混 阅读全文
posted @ 2021-07-16 16:24 11014p 阅读(6127) 评论(0) 推荐(2) 编辑
摘要: 查询某个schema下所有表: select * from schema..sysobjects where xtype='U' 若表明为数字等特殊表名,可以加[ ]: select * from shema..[1001] 查询某个shema下所有表的行数: SELECT a.name, b.ro 阅读全文
posted @ 2021-05-24 22:15 11014p 阅读(51) 评论(0) 推荐(0) 编辑
摘要: shell特殊变量,分别是:$#、$*、$@、$?、$$ $0:当前脚本的文件名。 $n(n≥1):传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是 $1,第二个参数是 $2。 $#:传递给脚本或函数的参数个数。 $*:传递给脚本或函数的所有参数。 $@:传递给脚本或函数的 阅读全文
posted @ 2021-05-19 18:11 11014p 阅读(68) 评论(0) 推荐(0) 编辑
摘要: 什么是Maven? 如今我们构建一个项目需要用到很多第三方的类库,如写一个使用Spring的Web项目就需要引入大量的jar包。一个项目Jar包的数量之多往往让我们瞠目结舌,并且Jar包之间的关系错综复杂,一个Jar包往往又会引用其他Jar包,缺少任何一个Jar包都会导致项目编译失败。 以往开发项目 阅读全文
posted @ 2021-03-23 20:19 11014p 阅读(47) 评论(0) 推荐(0) 编辑
摘要: 生产者消费者问题是线程模型中的经典问题:生产者和消费者在同一时间段内共用同一存储空间,生产者向空间里生产数据,而消费者取走数据。 阻塞队列就相当于一个缓冲区,平衡了生产者和消费者的处理能力。这个阻塞队列就是用来给生产者和消费者解耦的。 wait/notify方法 首先,我们搞清楚Thread.sle 阅读全文
posted @ 2020-09-19 22:08 11014p 阅读(157) 评论(0) 推荐(0) 编辑
摘要: 浅谈Synchronized: synchronized是Java的一个关键字,也就是Java语言内置的特性,如果一个代码块被synchronized修饰了,当一个线程获取了对应的锁,执行代码块时,其他线程 便只能一直等待,等待获取锁的线程释放锁,而获取锁的线程释放锁会有三种情况: 1).获取锁的线 阅读全文
posted @ 2020-09-19 16:36 11014p 阅读(242) 评论(0) 推荐(0) 编辑
摘要: 为什么使用JWT? json Web Token(缩写JWT)是目前最流行的跨域认证解决方案。 session登录的认证方案是看,用户从客户端传递用户名和密码登录信息,服务端认证后将信息储存在session中,将session_id放入cookie中,以后访问其他页面,浏览器都会带着cookie,服 阅读全文
posted @ 2020-09-12 19:15 11014p 阅读(452) 评论(0) 推荐(0) 编辑
摘要: 信号量 一:什么是信号量 信号量是对锁的扩展,不管是同步synchronized还是ReentrantLock,一次只能允许一个线程访问一个资源,但是信号量可以使得多个线程,同时访问一个资源。 基本方法: public Semaphore(int permits) { sync = new Nonf 阅读全文
posted @ 2020-09-08 09:06 11014p 阅读(194) 评论(0) 推荐(0) 编辑
点击右上角即可分享
微信分享提示