之前中秋项目搞活动,用户比较活跃 SE.Redis 频繁报 Timeout 异常,狂翻了一波 issues 发现提这个问题还蛮多的,作者非常频繁的提到使用 slowlog 这个命令进行排查,那么问题就来了,它是干嘛滴?

Redis slowlog 是个什么

使用这个命令可以读取或重置 Redis 慢速查询日志。通俗讲就是 redis 可以把执行时间超过我们设定值的命令记录下来,slowlog 是记录到内存中的哦,所以非常快。

这里的执行时间不包括 I/O 操作,比如与客户端,发送应答等等,就是实际执行命令所需的时间(命令唯一执行的阶段,线程被阻塞且不能同时处理其他请求)。

设置 Redis slowlog

两种方式:

  1. 可以通过配置 redis.conf 来完成。
  2. 运行时,使用 CONFIG GET 和 CONFIG SET 命令配置。

这里我们主要说的是第二种方式,您可以使用两个参数来配置慢日志:slowlog-log-slow-than * ,告诉 Redis, 记录超过 * 微秒 内的命令执行情况。

需要注意的是,设置负数表示禁用 slowlog ,而设置 0 则强制记录每个命令的执行情况。
以下是 slowlog 的设置使用说明:

redis 127.0.0.1:6379>config set slowlog-log-slower-than 10000
"OK" redis 127.0.0.1:6379>config get slowlog-log-slower-than
1)  "slowlog-log-slower-than"
2)  "10000"

那么问题又来了,slowlog 是记录再内存中的,如果记录所有的命令 log 会不会把内容撑爆呢?

答案是当然不会。slowlog 记录的 log 数是有最大长度限制的,我们可以通过 slowlog-max-len 来查询 slowlog 的最大长度。最小值为零。当一个新的命令被记录下来,并且如果已经达到它的最大长度时,最老的一个 log 将从队列中删除,FIFO 。

另外,使用 slowlog len 命令可以查看当前已记录的数量。
使用 slowlog reset 重置已记录的 slowlog 信息。

如何阅读 slowlog

我们已经了解 slowlog 是记录在内存中的,所以您可以启用所有命令的日志记录即 slowlog-log-slow-than 配置参数设置为 0 便于监测性能。

要读取 slowlog,使用 SLOWLOG GET 获取命令,它返回慢日志中的每一个条目。可以只返回N个最近的条目,将一个附加参数传递给命令(例如 SLOWLOG GET 2)。

redis 127.0.0.1:6379> slowlog get 2
    1) 1) (integer) 14             //slowlog 唯一标识
       2) (integer) 1309448221     //unix 时间戳
       3) (integer) 15             //命令执行的时间,单位:微秒
       4) 1) "ping"                //具体执行的命令,最多记录128
    2) 1) (integer) 13
       2) (integer) 1309448128
       3) (integer) 30
       4) 1) "slowlog"
          2) "get"
          3) "100" //其中 Redis 4.0 及以上版本还包含以下两部分:        5) "127.0.0.1:58217"         //客户端IP:Port
       6) "worker-123"              //客户端名称

最后,需要注意此命令需要 2.2.12及以上版本的 redis 才能支持。

轻松使用 Redis slowlog的更多相关文章

  1. Redis slowlog

    和mongo的slowlog一样,redis中对于操作时间较长(默认为10秒)的命令也会记录下来,不过它将它们保存在redisServer结构中的slowlog这个链表中,新进来的log排在链表头部, ...

  2. Redis slowlog慢查询

    slowlog (阅读原文) 此命令用于读取和重置redis慢请求日志 redis slow log概述 redis的slow log记录了那些执行时间超过规定时长的请求.执行时间不包括I/O操作(比 ...

  3. redis slowlog 慢查询日志

    设置 config set slowlog-log-slower-than 10000(微秒) //查看redis时间超过上面设置的阀值的key slowlog len 有几个key slowlog ...

  4. 1、redis 基础

    1.1 导言 如果你从来没使用过 Redis 数据库,那你肯定会问,为什么我们要学 Redis数据库,我只使用 MySQL 或 Oracle 就够了.其实 Redis 虽叫数据库,可又不是传统意义上的 ...

  5. redis安装与介绍

    安装 一般推荐次新版的最后一个发行版.https://redis.io/download 先安装gcc, yum install gcc tar xzf redis-3.2.3.tar.gz cd r ...

  6. Redis慢链接查看

    设置定义慢日志(小于n微秒的定义为慢日志):CONFIG SET slowlog-log-slower-than n 注:1秒 = 1,000,000微秒设置服务器保存的慢日志最多条数:config ...

  7. PHP Redis 全部操作方法

    Classes and methods Usage Class Redis Class RedisException Predefined constants Class Redis Descript ...

  8. redis状态查看

      https://redis.readthedocs.org/en/latest/server/slowlog.html   https://redis.readthedocs.org/en/lat ...

  9. redis专题--slow log详解

    SLOWLOG subcommand [argument] 什么是 SLOWLOG Slow log 是 Redis 用来记录查询执行时间的日志系统. 查询执行时间指的是不包括像客户端响应(talki ...

随机推荐

  1. 我的Spring MVC第一个应用 (最终版)

    项目结构图: 代码如下: Product package com.mstf.bean; import java.io.Serializable; /** * Product类,封装了一些信息,包含三个 ...

  2. PostgreSQL Replication之第二章 理解PostgreSQL的事务日志(4)

    2.4 调整检查点和XLOG 目前为止,这一章已经提供深入洞察PostgreSQL如何写入数据,一般来说,XLOG是用来干什么的.考虑到这方面的知识,我们现在可以继续并学习我们能做些什么来使我们的数据 ...

  3. MPP的进化 - 深入理解Batch和MPP优缺点

    https://mp.weixin.qq.com/s/scXNfkpjktCZxBg3pYEUUA?utm_medium=hao.caibaojian.com&utm_source=hao.c ...

  4. C#自定义事件监视变量变化

    首先监视定义类 class Event { public delegate void tempChange(object sender, EventArgs e); public event temp ...

  5. Chrome Service Model

    Chrome Service Model John Abd-El-Malek February 2016 Objective Move Chrome codebase towards a servic ...

  6. highGUI图形用户界面

    #include <opencv2\core\core.hpp> #include <opencv2\highgui\highgui.hpp> using namespace ...

  7. [JSOI2007]建筑抢修 优先队列 贪心

    Code: #include<cstdio> #include<algorithm> #include<cstring> #include<queue> ...

  8. 列表的所有的input,将它的值以键值对的形式存放到一个数组里

    要求的格式 代码块 $('.btn-confirm').on('tap',function(){ var arr={}; var name = $("input[name='insuranc ...

  9. yii2.0 数据生成 XML 格式。

    return 部分的数组就是你要生成 xml 的数据. 生成的格式如下: yii2.0 中使用 xml 就是这么简单!

  10. caioj 1412 动态规划3:a+b问题(完全背包方案数)

    每个素数就是一个物品,然后就相当于求完全背包方案数 把max改成+就好了. #include<cstdio> #include<vector> #include<cstr ...