加入收藏 | 设为首页 | 会员中心 | 我要投稿 河北网 (https://www.hebeiwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

一文带你相识 Redis 的慢日记相干底层道理

发布时间:2019-12-20 14:54:42 所属栏目:编程 来源:站长网
导读:副问题#e# 信托许多小搭档在行使 Redis 的时辰都知道 Redis 有相干慢日记的查询成果,而且多几几何都看过。那 Redis 底层到底是假如建设慢日记以及慢日记的布局是什么样子的呢?这篇文章就带各人熟悉一下。我们先看一张慢日记的截图 行使slowlog get 2呼吁查
副问题[/!--empirenews.page--]

一文带你相识 Redis 的慢日记相干底层道理

信托许多小搭档在行使 Redis 的时辰都知道 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 来查察最大慢日记条数。如下图。

一文带你相识 Redis 的慢日记相干底层道理

配置呼吁

上面我们行使config get 呼吁查察了时长配置和条数配置,相反的我们可以用config set来配置相干参数,如下图,我们先查察一下设置,然后再通过config set slowlog-log-slower-than 1000 呼吁和 config set slowlog-max-len 64 呼吁来配置详细的值:

一文带你相识 Redis 的慢日记相干底层道理

通过上面的操纵我们可以看到相干的设置已经变动见效了。

slowlog-log-slower-than:这个参数的意思是任何呼吁执行高出这个时刻就会被记录为慢日记,单元是微秒。

slowlog-max-len:这个参数暗示记录的慢日记的最大条数,配置了这个值事后,新的日记加进来,ID 最小的日记就会被删除。

为了验证上面的第二点,我这边将slowlog-log-slower-than配置为 10 微秒,slowlog-max-len 配置为 5 条来举办试验,起首第一次行使slowlog get呼吁查询的时辰 5 条慢日记的编号是从 83-87,

一文带你相识 Redis 的慢日记相干底层道理

再次行使slowlog get呼吁查询的编号功效是84-88,声名 ID 为 83 的那一条已经被删除了。

一文带你相识 Redis 的慢日记相干底层道理

03、慢日记的存储道理

存储布局

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; 

(编辑:河北网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读