Redis是单线程操作,如果一个命令执行耗时较长的操作,就会阻塞其他请求,严重会影响整个平台的稳定.慢日志监控的重要性也就体现处理了.


 

在讲解pipeline,曾讲过命令执行的4个阶段:

1.发送命令

2.命令排队

3.命令执行

4.返回结果

慢日志主要是监控记录命令执行阶段的命令相关信息.

 

这些执行慢的命令是保存在一个先进先出队列中,这个队列的长度固定,当队列满了之后会移除掉最先保存的数据.并且这个队列只保存到内存中,不会持久化.

 

这个队列的长度和时间阈值都是通过redis.conf配置的,

配置如下:


#慢日志时间阈值,单位:微妙slowlog-log-slower-than 10000#慢日志队列长度slowlog-max-len 128


通过config命令动态配置


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


 

慢日志操作命令

使用debug sleep模拟长时间查询操作


127.0.0.1:6379> debug sleep 1OK(1.00s)


查询慢日志数据

结果含义:

1) 每个慢日志条的唯一累进标识符

2) 记录命令执行的Unix时间戳

3) 命令执行所需的时间(以微秒为单位)

4) 组成命令参数的数组

5) 客户端IP地址和端口

6) 客户端名称(如果通过CLIENT SETNAME命令设置)


127.0.0.1:6379> slowlog get 101) 1) (integer) 2   2) (integer) 1589791533   3) (integer) 1001795   4) 1) "debug"      2) "sleep"      3) "1"   5) "127.0.0.1:55526"   6) ""


查看慢日志数量


127.0.0.1:6379> slowlog len(integer) 1


重置慢日志数据


127.0.0.1:6379> slowlog resetOK


 

注意事项

1. 时间阈值不要设置过大,不利于正确记录那些会影响到服务的命令

2. 队列长度不要过小,不利于数据保存

3. 因为队列信息不会自动持久化,需要人为持久化处理