什么是慢查询?慢查询,顾名思义,就是慢查询,但是到底慢在哪里呢?首先我们来了解一下Redis命令执行的全过程:发送命令,排队命令执行,返回结果在慢查询的定义中,统计慢的时间段指的是命令执行的那一步。没有慢查询不代表客户端没有超时问题。可能是网络传输有延迟,也可能是排队的命令较多。由于Redis中命令执行的排队机制,慢查询会导致其他命令的级联阻塞。因此,当客户端请求超时时,需要及时检查该时间点是否存在慢查询,从而分析慢查询导致的命令级别。链接阻塞。什么是慢查询日志?慢查询日志是Redis服务器计算每条命令执行前后的执行时间,超过一定阈值时记录下来的日志。日志记录了慢查询发生的时间,以及执行时间、具体命令等信息,可以帮助开发和运维人员定位系统中存在的慢查询。如何获取慢查询日志?您可以使用slowlogget命令获取慢查询日志。也可以在slowlogget后加一个数字来指定获取多少条慢查询日志。例如获取3条慢查询日志:>slowlogget31)1)(integer)61072)(integer)16163989303)(integer)31094)1)"config"2)"rewrite"2)1)(整数)61062)(整数)16137017883)(整数)360044)1)“flushall”3)1)(整数)61052)(整数)16087223383)(整数)204494)1)“scan"2)"0"3)"MATCH"4)"*comment*"5)"COUNT"6)"10000"从上面的例子可以看出每条慢查询日志由4个属性组成:标识符ID、命令执行的时间戳、命令执行的名称和参数、执行时间。如何获取慢查询日志的长度?可以使用slowloglen命令获取慢查询日志的长度,例如:>slowloglen(integer)121在上面的例子中,当前Redis中有121条慢查询日志。如何清除慢查询日志?可以使用slowlogreset命令清除慢查询日志,例如:>slowloglen(integer)121>slowlogresetOK>slowloglen(integer)0如何配置慢查询参数?如上所述,慢查询需要以下两个配置:指定命令执行时间的阈值。存储慢查询日志的数量。Redis提供了两个对应的参数:slowlog-log-slower-than和slowlog-max-len。接下来,我们将详细介绍这两个参数。slowlog-log-slower-thanslowlog-log-slower-than的作用是指定命令执行时间的阈值。当命令的执行时间超过这个阈值时,就会被记录下来。它的单位是微秒(1秒=1000毫秒=1000000微秒),默认是10000微秒。如果slowlog-log-slower-than设置为0,所有命令都将被记录。如果将slowlog-log-slower-than设置为小于0,则不会在日志中记录任何命令。在实际生产环境中,这个配置需要根据Redis的并发度进行调整。因为Redis采用单线程响应命令,如果命令执行时间超过1000微秒,那么Redis最多可以支持不到1000OPS,所以对于高并发场景建议将Redis设置为1000微秒。slowlog-max-lenslowlog-max-len的作用是指定慢查询日志中存储的最大记录数。其实Redis是用一个列表来存储慢查询日志的,slowlog-max-len就是这个列表的最大长度。当一个新命令满足慢查询条件时,它被插入到这个列表中。当慢查询日志列表达到最大长度时,最早插入的命令将从列表中移除。例如slowlog-max-len设置为10,当插入第11条命令时,会先移除列表中的第1条命令,然后将第11条命令放入列表中。记录慢查询意味着Redis会截断长命令,不会占用大量内存。在实际生产环境中,为了降低慢查询被移除的可能性,更容易定位慢查询,建议将慢查询日志的长度调大一些。比如可以设置成1000多个。如何配置在Redis中修改配置有两种方式:修改Redis的配置文件。例如设置slowlog-log-slower-than为1000,slowlog-max-len为1200:slowlog-log-slower-than1000slowlog-max-len1200可以使用configset命令动态修改。例如设置slowlog-log-slower-than为1000,slowlog-max-len为1200:>configsetslowlog-log-slower-than1000OK>configsetslowlog-max-len1200OK>configrewriteOK如果Redis要持久化配置到本地配置文件,需要执行configrewrite命令。总结慢查询是指需要很长时间才能执行命令的查询。使用slowlogget命令获取慢查询日志;使用slowloglen命令获取慢查询日志的长度;使用slowlogreset命令清除慢查询日志。使用slowlog-log-slower-than配置命令执行时间的阈值;使用slowlog-max-len配置慢查询日志中存储的最大记录数。
