在线精品99_中国九九盗摄偷拍偷看_91免费版在线观看_91.app_91高清视频在线_99热最新网站

Redis的慢日志相关底层原理

134次阅读
没有评论

共计 2831 个字符,预计需要花费 8 分钟才能阅读完成。

这篇文章主要讲解了“Redis 的慢日志相关底层原理”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着丸趣 TV 小编的思路慢慢深入,一起来研究和学习“Redis 的慢日志相关底层原理”吧!

 01、前言

相信很多小伙伴在使用 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 命令来设置具体的值:

通过上面的操作我们可以看到相关的配置已经更改生效了。

鸿蒙官方战略合作共建——HarmonyOS 技术社区

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 的那一条已经被删除了。

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;

image-20191211220858341

slowlogEntry 实体的相关字段含义如下:

id: 标识慢日志的唯一 ID

time: 命令执行的时间戳

duration: 命令执行是耗时,单位为微妙

agrv: 命令和参数数组

argc: 命令和参数的个数

如上图就表示了在执行命令 set number 520 发生了慢日志,命令执行耗时 10 微秒。

04、操作慢日志

知道了慢日志的存储结构,我们就需要考虑在执行命令的时候,如何根据条件去创建慢日志。

首先我们需要在命令的执行前后记录时间戳,然后相减计算出命令的执行耗时,然后根据 Redis 服务器配置 slowlog-log-slower-than   进行对比,决定是否记录慢日志,另外在记录慢日志的时候需要根据 slowlog_max_len 值判断是否要删除最久的日志信息。伪代码如下:

//1.  记录命令执行前的时间戳  long before = now(); //2.  执行命令  execute(argv, argc); //3.  记录命令执行后的时间戳  long after = now(); //4.  调用创建慢日志函数  slowlogPushEntryIfNeed(argv, argc, after - before);

slowlogPushEntryIfNeed 函数主要用来判断是否插入数据,以及是否删除旧数据。

void slowlogPushEntryIfNeed(robj **argv, int argc, long long duration) { //1.  判断是否开启慢日志  if (server.slowlog_log_slower_than   0) return; //2.  如果超时,则插入慢日志  if (duraton   server.slowlog_log_slower_than){ // 插入  } while (listLength(server.slowlog)   server.slowlog_max_len) { // 删除  } }

我们先判断服务器是否配置了超时参数,如果超时参数小于 0   则直接返回,否则再比较命令执行时间是否超时,如果超时则插入慢日志; 最后在比较慢日志的条数是否达到上限,如果达到则进行删除。

感谢各位的阅读,以上就是“Redis 的慢日志相关底层原理”的内容了,经过本文的学习后,相信大家对 Redis 的慢日志相关底层原理这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是丸趣 TV,丸趣 TV 小编将为大家推送更多相关知识点的文章,欢迎关注!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-28发表,共计2831字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)
主站蜘蛛池模板: 欧美自拍视频在线 | 一区二区三区精密机械 | 大陆极品少妇内射aaaaaa | 69久久 | 青草超级碰碰在线视频 | 国产99久久九九精品免费 | 亚洲麻豆精品 | 精品久久久久久久久久 | 三级理论手机在线观看视频 | 日韩a级| 中国毛片免费观看 | 亚洲中文字幕人成影院 | 午夜精品影院 | 亚洲av不卡无码国产 | 国产成人精品一区二区 | 国产精品无码一本二本三本色 | 免费看欧美一级特黄α大片 | 欧美特黄一级大黄录像 | 成年男女免费视频网站播放 | 国产精品成人久久久久久久 | 国产在线观看精品一区二区三区 | 国产高清自产拍av在线 | 韩国xxxx色视频在线观看 | 亚洲国产天堂久久综合 | 韩国日本美国免费毛片 | 中文字幕精品亚洲无线码一区 | 国产三级做爰在线观看视频 | 亚洲欧美高清在线 | 精品人妻av一区二区三区 | 九九精品国产 | 日本高清福利视频在线观看 | 亚洲人成网址在线观看 | 黄色在线观看视频免费 | 小说区图片区综合久久88 | 在线精品亚洲一区二区小说 | 国产精品99爱免费视频 | 成人特黄午夜性a一级毛片 成人特级毛片69免费观看 | 一级做a爱片特黄在线观看免费看 | 国产日韩欧美精品一区二区三区 | 老司机在线精品视频免费看 | 国内精品久久久久久久久野战 |