一文带你了解 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) { //删除 (编辑:晋中站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |