共计 1487 个字符,预计需要花费 4 分钟才能阅读完成。
首先我们需要知道 Redis 的慢查询日志有什么用?日常在使用 redis 的时候为什么要用慢查询日志?
第一个问题:
慢查询日志是为了记录执行时间超过给定时长的 redis 命令请求
第二个问题:
让使用者更好地监视和找出在业务中一些慢 redis 操作,找到更好的优化方法
在 Redis 中,关于慢查询有两个设置 – 慢查询最大超时时间和慢查询最大日志数。
1. 可以通过修改配置文件或者直接在交互模式下输入以下命令来设置慢查询的时间限制,当超过这个时间,查询的记录就会加入到日志文件中。
CONFIG SET slowlog-log-slower-than num
设置超过多少微妙的查询为慢查询,并且将这些慢查询加入到日志文件中,num 的单位为毫秒,windows 下 redis 的默认慢查询时 10000 微妙即 10 毫秒。
2. 可以通过设置最大数量限制日志中保存的慢查询日志的数量,此设置在交互模式下的命令如下:
CONFIG SET slowlog-max-len num
设置日志的最大数量,num 无单位值,windows 下 redis 默认慢查询日志的记录数量为 128 条。
命令的解析:
CONFIG 命令会使 redis 客户端自行去寻找 redis 的.conf 配置文件,找到对应的配置项进行修改。
以上的都是在交互模式下对 redis 进行配置,跟直接在.conf 文件下修改配置行没有什么区别,都是可以实现以上的慢查询日志记录功能的,但是需要注意的是,在客户端的交互模式下输入 CONFIG SET 命令,只针对当前的会话来执行日志记录的设置,其他的会话(重新启动 redis 服务端), 那么还是老样子,按照 redis.conf 文件的默认设置来执行?为什么会是这样的?因为 redis 是基于内存的,当一个退出一个客户端之后,所有的设置都会退回到默认版本。下次想设置慢查询日志配置,还是需要重新键入命令。那么在.conf 文件下中修改配置呢?这种办法就相对一劳永逸了,因为每次服务端的启动都是以配置文件为基础的,所以 slowlog 日志会默认以.conf 文件中的设置为标准。
即使这样,当做一些测试的时候,个人比较喜欢直接在交互模式下修改,交互模式下修改可以在当前的状态下和以后开启 redis 客户端(在服务端还没重启的条件下)都会执行慢查询日志的记录功能。而如果在.conf 文件中修改配置项,那么需要重新启动 redis 服务器,来使这个功能生效,下次需要修改配置,还得到.conf 文件来重新配置。
为更完整描述配置文件过程,我这里写一下如何在.conf 文件中如何修改配置项
windows 操作系统下用记事本,linux 操作系统下用 sublim text 或者 vim 打开。找到
对应下面就会找到配置选项了
那么接下来,如何查看慢查询呢?
又是进入交互模式下,命令很简单。
SLOWLOG GET
(当然也可以用小写,redis 客户端对大小写没有太严格的限制)
以 windows 为例查看记录如下
为了方便解说,我设置超时时间为 0 毫秒,日志记录为 1 条
那么记录的中的 1)2)3)4)分别表示什么呢?
1)表示日志唯一标识符 uid
2)命令执行时系统的时间戳
3)命令执行的时长,以微妙来计算
4)命令和命令的参数
做日志查询的时候,可以通过 3)来查看是具体的命令运行时间(注意:再强调一次,时间的单位是微妙,但对于一个插入操作来说,10000 微妙,也就是 10 毫秒即 0.01 秒已经可以算是慢操作了)哪些操作出了问题。当然这只限于测试使用,如果需要当业务出现 redis 插入查询缓慢的事件,需要去查看 redis 生成的持久型日志,这需要额外去配置一些内容,其中涉及到了集群和分布式,这里先点到为止。
: