win 启动redis_Redis慢查询日志

本文介绍了Redis慢查询日志的配置,包括slowlog-log-slower-than和slowlog-max-len参数,以及如何通过slowlog get命令查看日志。慢查询日志遵循先进先出的删除策略,当达到最大存储数量时,会删除最早的记录。同时,文章还提供了通过Docker部署Redis的简要说明。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Redis慢查询日志

Redis慢查询日志功能是用于记录执行时间超过给定时长的命令请求,可以通过查看慢查询日志来监控和优化查询速度

慢查询配置相关的参数
  1. slowlog-log-slower-than:指定执行时间超过多少微秒的命令会被记录到日志上

    例如,该值设为100,则执行时间超过100微秒的命令会被记录到慢查询日志中

  1. slowlog-max-len:指定服务器上最多保存慢查询日志的条数

    例如,该值设为5,那么命令执行时间超过slowlog-log-slower-than设置的时间的命令会被记录到慢查询日志上,如果慢查询日志的数量等于5,那么再添加慢查询日志时,需要把最早添加的慢查询日志删除,即慢查询日志删除采用 先进先出 的方式

慢查询日志相关命令
  1. config set slowlog-log-slower-than 100  

    #  设置set slowlog-log-slower-than

  2. config set slowlog-max-len 5  

    # 设置  slowlog-max-len

  3. slowlog get # 查看慢查询日志

先看下服务器现在的默认配置

7b7dbdac41b50e283869d57e9cb1383d.png

可以发现我的服务器配置的慢查询日志的时间的10ms,慢日志的条数是 128

慢查询记录

通过 slowlog get 查看慢查询日志是什么样子?【从其他redis服务器看的】

87dc7661764cc70486050dbfc459e00f.png

慢查询日志的添加和删除

我们在前面已经介绍过,当慢查询日志的条数超过最大值时,采用 先进先出 的方式删除最老的慢查询日志

下面我们通过修改慢查询日志的配置来演示下 慢日志的删除是先进先出

把 slowlog-log-slower-than 设为0,这样任何redis的命令都会被当做慢查询命令添加到慢查询日志中

把 slowlog-max-len 设为 2,这样慢查询日志大小为2

配置完后,看下图

d2b978aa8821970eec6015b1256f07c6.png

在客户端发送3条redis的命令,这样就能验证删除逻辑

先发送2条命令,然后看下慢查询日志,如下图所示

5e71ad6e7a9d50f65a3df86d0c723db1.png

因我们配置的slowlog-max-len是2,所以当我在发送redis命令的时候,慢查询日志要执行删除策略,如下图所示

075e90129042dac490c18fa647c20c61.png

可以发现慢查询日志中,已经没有了 set str1 '1'  和 set str2 '2',验证了慢查询日志删除遵循 先进先出

通过实验验证了 redis 的慢查询记录采用 先进先出 的方式删除,那么我们通过 redis 的源码    https://github.com/antirez/redis/blob/unstable/src/slowlog.c 

每次执行命令前后会记录unix时间戳,两个时间戳的差就是命令执行的时间,也就是下面源码中的 duration

/* Push a new entry into the slow log. * This function will make sure to trim the slow log accordingly to the * configured max length. */void slowlogPushEntryIfNeeded(client *c, robj **argv, int argc, long long duration) {    // 未开启慢查询功能,直接返回    if (server.slowlog_log_slower_than < 0) return; /* Slowlog disabled */    // 命令执行时间超过了设置的超时时间的上限,将命令添加到慢查询日志中,采用头插入的方式    if (duration >= server.slowlog_log_slower_than)        // 从头插入        listAddNodeHead(server.slowlog,                        // 创建一个慢查询记录对象                        slowlogCreateEntry(c,argv,argc,duration));    /* Remove old entries if needed. */    // 日志超过最值的最大值,进行删除    while (listLength(server.slowlog) > server.slowlog_max_len)        // 删除日志,删除最早添加的,即在列表尾部的        listDelNode(server.slowlog,listLast(server.slowlog));}
小结
  1. redis慢查询日志主要和 slowlog-log-slower-than、 slowlog-max-len两个参数有关

  2. redis慢日志的删除采用 先进先出 的方式

备注

在 linux 部署 redis 需要服务器安装 gcc ,需要 root 权限,所以我采用 docker 方式部署,比较方便

  1. docker pull redis  # 获取最新的 redis 镜像

  2. docker run --name redis -d  -p 6379:6379 redis  # 启动 redis 实例并制定端口

  3. docker exec -it redis 容器id redis-cli # 连接 redis 客户端 其中 redis 容器id 通过命令 docker ps查看

   如果是win本用 winpty docker exec -it b29f7ba42310 redis-cli

参考资料

  1. 《redis设计与实现》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值