下载安卓APP箭头
箭头给我发消息

客服QQ:3315713922

Redis中的showlog功能简介

作者:课课家教育     来源: http://www.kokojia.com点击数:1720发布时间: 2017-09-19 09:30:16

标签: 数据库Redisshowlog

  Redis有一个实用的slowlog功能,正如你可以猜到的,可以让你检查运行缓慢的查询.RedisShowlog是Redis用来记录查询执行时间的日志系统。

  查询执行时间指的是不包括像客户端响应(talking)、发送回复等IO操作,而单单是执行一个查询命令所耗费的时间。

  另外,slowlog保存在内存里面,读写速度非常快,因此你可以放心地使用它,不必担心因为开启slowlog而损害Redis的速度。

  redisslowlog概述

  redis的slowlog记录了那些执行时间超过规定时长的请求。执行时间不包括I/O操作(比如与客户端进行网络通信等),只是命令的实际执行时间(期间线程会被阻塞,无法服务于其它请求)。

  有两个参数用于配置slowlog:

  slowlog-log-slower-than:设定执行时间,单位是毫秒,执行时长超过该时间的命令将会被记入log。-1表示不记录slowlog;0强制记录所有命令。

  slowlog-max-len:slowlog的长度。最小值为0。如果日志队列已超出最大长度,则最早的记录会被从队列中清除。

  可以通过编辑redis.conf文件配置以上两个参数。对运行中的redis,可以通过configget,configset命令动态改变上述两个参数

  读取slowlog

  slowlog是记录在内存中的,所以即使你记录所有的命令(将slowlog-log-slower-than设为0),对性能的影响也很小。

  slowlogget:列出所有slowlog

  slowloggetN:列出最近N条slowlog

  语法

  redisShowlog命令基本语法如下:

 语法    redisShowlog命令基本语法如下:

  可用版本

  >=2.2.12

  返回值

  取决于不同命令,返回不同的值。

  Slowlog将会记录运行时间超过Y微秒的最后X条查询.X和Y可以在redis.conf或者在运行时通过CONFIG命令:

  进行设置。

  slowlog-log-slower-than是用来设置微秒数的,因此上面的设置将记录执行时间超过5秒的查询.要获取记录的日志,你可以使用SLOWLOGGETX命令,这里X是你想要获取的记录条数:

 进行设置。    slowlog-log-slower-than是用来设置微秒数的,因此上面的设置将记录执行时间超过5秒的查询.要获取记录的日志,你可以使用SLOWLOGGETX命令,这里X是你想要获取的记录条数:

  它将会展示一个唯一的id,时间戳和发生的查询,查询执行所花掉的时间和实际被执行的命令+参数.你可以通过SLOWLOGRESET擦出日志.

  最后一次查看slowlog,我很不淡定的看到DEL命令的执行竟然花了超过20毫秒的时间.还记得吗,Redis是单线程的,因此这样会阻塞(并且严重的有碍)我们系统的并发.还有,因为这是一个写操作,它将会在向所有从属Redis服务复制的时候阻塞这一复制过程.额,到底这是咋回事呢?

  也许除了我之外所有人都知道这个问题了,但是这证明了Redis的DEL命令的时间复杂度对于字符串和哈希值而言是O(1),而对于list、set和sortedset而言则是O(N)(这里的N是集合中数据项的数目).你会删除一个包含数百万条数据的set吗?那就等着阻塞吧.

  我们的解决方案很简单:不去删除这些数据项,而是将它们重命名,并且在后台作业中用小而可间断的块去执行对它们的删除操作.首先,是我们的delayed_delete函数:

 我们的解决方案很简单:不去删除这些数据项,而是将它们重命名,并且在后台作业中用小而可间断的块去执行对它们的删除操作.首先,是我们的delayed_delete函数:

  这将会将集合重命名,并且将新的名称添加到gc:set或者gc:zsetset中(我们没有使用list,但如果你使用了的话,你也应该向其加入这方面的支持).

  下一步我们安排了一个Ruby脚本每分钟运行一次:

  你可以基于自己的需要将修改数字.你的集合有多大,以及它们被删除有多频繁?因为我们不去太过频繁的做这些类型的产出操作,我们可以一次只进行一小块的删除操作.

  不过这种方法比直接删除更加的慢,但它在并发的环境下却可以表现得很好.

  实例

  查看日志信息:

 查看日志信息:

  查看当前日志的数量:

 查看当前日志的数量:

  使用命令SLOWLOGRESET可以清空slowlog

使用命令SLOWLOGRESET可以清空slowlog

  小编结语:

  更多内容尽在课课家教育!

赞(14)
踩(0)
分享到:
华为认证网络工程师 HCIE直播课视频教程