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

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

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

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

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) { 

    //删除 

(编辑:湖南网)

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

热点阅读