一文带你了解 Redis 的慢日志相关底层原理
副标题[/!--empirenews.page--]
相信很多小伙伴在使用 Redis 的时候都知道 Redis 有相关慢日志的查询功能,并且多多少少都看过。那 Redis 底层到底是如果创建慢日志以及慢日志的结构是什么样子的呢?这篇文章就带大家认识一下。我们先看一张慢日志的截图 使用slowlog get 2命令查看最近的两条慢日志信息,如上图,我们可以看到每条日志中包含的信息有六个部分组成,从上到下编号为 0-5,依次代表的意思是 0:日志的唯一编号 ID 1:命令执行的当前时间戳 2:命令执行的耗时时长,单位微妙 3:具体的执行命令和参数 4:客户端的 ip 和端口(4.0 版本以上才支持) 5:客户端名称(4.0 版本以上支持) 如上图所示,第一条慢日志的 ID 是 41,命令执行的时间戳是 1575729996,并且执行了 16129 微妙,具体执行的命令就是slowlog get,ip 和端口是27.38.56.88:8223,客户端的名称没有设置。 02、慢日志命令设置查看命令 上面我们已经大概的知道的一条慢日志的格式,自然的我们可以想到的问题是一个命令执行多长时间,我们就可以认为是慢查询,以及慢日志最多能保存多少条。 我们可以通过config get slowlog-log-slower-than 命令来查看 Redis 的时长设置,以及通过config get slowlog-max-len 来查看最大慢日志条数。如下图。 设置命令 上面我们使用config get 命令查看了时长设置和条数设置,相反的我们可以用config set来设置相关参数,如下图,我们先查看一下配置,然后再通过config set slowlog-log-slower-than 1000 命令和 config set slowlog-max-len 64 命令来设置具体的值: 通过上面的操作我们可以看到相关的配置已经更改生效了。 slowlog-log-slower-than:这个参数的意思是任何命令执行超过这个时间就会被记录为慢日志,单位是微秒。 slowlog-max-len:这个参数表示记录的慢日志的最大条数,设置了这个值过后,新的日志加进来,ID 最小的日志就会被删除。 为了验证上面的第二点,我这边将slowlog-log-slower-than设置为 10 微秒,slowlog-max-len 设置为 5 条来进行试验,首先第一次使用slowlog get命令查询的时候 5 条慢日志的编号是从 83-87, 再次使用slowlog get命令查询的编号结果是84-88,说明 ID 为 83 的那一条已经被删除了。 存储结构 struct redisServer { long long slowlog_entry_id;//下一条慢查询日志的 ID list *slowlog;//保存了所有慢查询日志的链表 long long slowlog_log_slower_than;//服务器配置 slowlog-log-slower-than 选项的值 unsigned long slowlog_max_len;//服务器配置的 slowlog-max-len 的值 } 在 Redis 的服务器状态中保存了慢日志的相关属性slowlog_entry_id 属性的初始值是 0 每创建一条慢日志的时候就会增加 1。 slowlog 链表里面存储了所有的慢日志,,链表是由slowlogEntry结构组成的,每个slowlogEntry代表一条慢日志。 slowlog_log_slower_than 和 slowlog_max_len 是前面服务器配置的相关参数。 slowlog 链表 typedef struct slowlogEntry { long long id;//唯一标识符 time_t time; //命令执行的时间,格式为 unix 时间戳 long long duration;//命令消耗的时间,以微秒为单位 robj **argv;//命令与命令参数 int argc; //命令与命令参数个数 } slowlogEntry; (编辑:晋中站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |