Redis | 慢查询

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: Redis | 慢查询

       MySQL 中存在慢查询,Redis 中也存在慢查询,Redis 的慢查询是命令执行超过设定阈值的查询就是慢查询。我们来整理一下。

慢查询

       Redis 会记录命令执行时间超过设定阈值时间的命令,这里的慢查询说的是命令执行慢,并非是 I/O 慢。

      一般情况下,我们都是通过客户端连接 Redis 服务器,然后发送命令给 Redis 服务器,Redis 服务器会把每个客户端发来的命令缓存入一个队列,然后逐个进行执行,最后再把结果返回给客户端。而我们这里的慢查询指的就是“执行命令”的那部分

而非网络 I/O 或者 命令排队的问题。

关于慢查询的配置

      慢查询的配置有两条,分别如下:

slowlog-log-slower-than: 慢查询阈值,命令执行时超过该配置参数设定的值,则被认为是慢查询;


slowlog-max-len: 慢查询日志最大记录数,也就是 Redis 最多记录多少条慢查询的记录。慢查询的记录是一个 list 类型,如果最大允许记录 100 条,那么在记录第 101 条时,第 1 条记录就会被移除,始终保持慢查询的记录数为 100 条。

慢查询相关的命令

       这里来看几条命令,这些命令都是与慢查询相关的命令,命令与配置的截图如下:

      config 命令是用于配置的命令,不单单仅限于使用到慢查询中,由于我们会使用这两条命令,因此也在这里提一下。config 命令可以动态的获取和设置 Redis 服务器的部分参数,通常我们查看和设置参数是进入 redis.conf 这个文件中,但是在运行时可以通过 config 命令来快速的获取和设置参数。


       来使用 config get 获取 slowlog-log-slower-than 和 slowlog-max-len 两个参数,命令如下。

127.0.0.1:6379> config get slowlog-log-slower-than
1) "slowlog-log-slower-than"
2) "10000"
127.0.0.1:6379> config get slowlog-max-len
1) "slowlog-max-len"
2) "128"

       从运行的返回结果可以看到,slowlog-log-slower-than 的值为 10000,该值的单位为微秒,那么 10000 微秒就是 10 毫秒。slowlog-max-len 的值为 128,即 Redis 只保存 128 条慢查询的记录。


       slowlog-log-slower-than 如果设置为 0,则表示记录所有的命令到慢查询队列中,如果 slowlog-log-slower-than 设置为 小于 0 的值,则表示不记录任何命令到慢查询队列中。


       在 redis-cli 下,使用 config 命令竟然没有语法提示!


      上面两个配置是关于慢查询的配置,关于慢查询的命令 Redis 提供了 slowlog 的命令,该命令可以提供一些参数,介绍如下。

slowlog get [n]: 获取[指定条数]的慢查询列表

slowlog len: 获取慢查询记录条数

slowlog reset: 清空慢查询列表

      以上就是关于慢查询的配置和命令了。

命令演示

       整个关于慢查询的配置和命令并不是很多,这里的命令演示,主要用来看看 slowlog get 命令的返回结果。

查看慢查询的配置参数

       来看 slowlog-log-slower-than 和 slowlog-max-len 两个配置参数的值。

127.0.0.1:6379> config get slowlog-log-slower-than
1) "slowlog-log-slower-than"
2) "10000"
127.0.0.1:6379> config get slowlog-max-len
1) "slowlog-max-len"
2) "128"

      slowlog-log-slower-than 的默认值是 10000 微秒,也就是 10 毫秒,这个在前面已经描述过。slowlog-max-len 的默认值是 128,也就是说慢查询命令队列可以保存 128 条慢查询记录。

设置慢查询配置参数

       将两个参数的值设置为适合我们进行学习的值。

127.0.0.1:6379> config set slowlog-log-slower-than 0
OK
127.0.0.1:6379> config set slowlog-max-len 5
OK

      slowlog-log-slower-than 的值设置为 0,这样可以把所有的命令都记录下来,然后将 slowlog-max-len 的值设置为 5,也就是只保存 5 条慢查询记录。

随便测试几条命令

      随便测试几条命令,方便我们后面查看慢查询中的内容。

127.0.0.1:6379> keys *
1) "k1"
2) "k2"
127.0.0.1:6379> get k1
"v1"
127.0.0.1:6379> hgetall k2
1) "k21"
2) "v1"
3) "k22"
4) "v2"

查看 Redis 记录的慢查询数量

      通过 slowlog len 命令来查看记录了多少条慢查询命令。

127.0.0.1:6379> slowlog len
(integer) 5

查看慢查询

      通过 slowlog get 命令来查看慢查询列表。

127.0.0.1:6379> slowlog get
1) 1) (integer) 6
   2) (integer) 1610156168
   3) (integer) 2
   4) 1) "slowlog"
      2) "len"
   5) "127.0.0.1:58406"
   6) ""
2) 1) (integer) 5
   2) (integer) 1610156086
   3) (integer) 10
   4) 1) "hgetall"
      2) "k2"
   5) "127.0.0.1:58406"
   6) ""
3) 1) (integer) 4
   2) (integer) 1610156073
   3) (integer) 9
   4) 1) "get"
      2) "k1"
   5) "127.0.0.1:58406"
   6) ""
4) 1) (integer) 3
   2) (integer) 1610156064
   3) (integer) 6
   4) 1) "keys"
      2) "*"
   5) "127.0.0.1:58406"
   6) ""
5) 1) (integer) 2
   2) (integer) 1610155960
   3) (integer) 5
   4) 1) "config"
      2) "set"
      3) "slowlog-max-len"
      4) "5"
   5) "127.0.0.1:58406"
   6) ""

      可以看到上面的列表就是所有慢查询的命令,因为我们只保留了 5 条。为了查看方便我们只查看一条,命令如下。

127.0.0.1:6379> slowlog get 1
1) 1) (integer) 7
   2) (integer) 1610156232
   3) (integer) 24
   4) 1) "slowlog"
      2) "get"
   5) "127.0.0.1:58406"
   6) ""

       在上面的输出中,一共有六行,分别解释:


1.  记录的慢查询标号,倒序显示


2. 记录该命令的时间戳


3. 执行命令的耗时,微秒为单位


4. 执行的具体命令


5. 执行该命令客户端的 IP 地址和端口号


       有了上面的信息就可以方便我们定位是哪个客户端执行了哪个命令导致的慢查询了。


总结

       Redis 变慢的情况可能是对某些数据结构做了比较慢的操作,也可能是用了不合适的数据结构等。当然了,导致 Redis 变慢的情况比较多,不单单是因为执行命令部分导致,但是慢查询只能帮我们记录执行慢的命令,至于导致 Redis 的慢的原因,要多方面的查找。

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
存储 监控 NoSQL
Redis从入门到精通之Redis 慢查询日志
慢查询日志是 Redis 提供的一个用于观察系统性能的功能,这个功能的实现非常简单,这里我们也简单地讲解一下。 本章先介绍和慢查询功能相关的数据结构和变量,然后介绍 Redis 是如何记录命令的执行时间,以及如何为执行超过限制事件的命令记录慢查询日志的。
1018 6
|
1月前
|
存储 Prometheus NoSQL
大数据-44 Redis 慢查询日志 监视器 慢查询测试学习
大数据-44 Redis 慢查询日志 监视器 慢查询测试学习
22 3
|
3月前
|
存储 监控 NoSQL
揭秘Redis慢查询:这个工具将彻底改变你的性能优化策略!
【8月更文挑战第8天】在互联网应用中,数据库性能常成瓶颈。Redis作为高速内存数据库亦可能遭遇慢查询问题。本文探讨慢查询成因与解决方法。首先定义慢查询及其影响因素,随后介绍Redis内置的慢查询日志功能,通过配置`slowlog-log-slower-than`与`slowlog-max-len`来监控执行时间过长的命令。利用`SLOWLOG get`命令分析日志,定位性能瓶颈所在。以`LRANGE`命令为例,提出数据结构调整、使用流水线、限制返回元素数量、异步执行及优化内存使用等策略。最终实现Redis性能提升,确保应用流畅运行。性能优化需持续监控、分析与调整。
87 1
|
5月前
|
存储 NoSQL 安全
Redis系列学习文章分享---第十五篇(Redis最佳实践--设计优雅的key+合适的数据结构+持久化如何配置+慢查询问题解决)
Redis系列学习文章分享---第十五篇(Redis最佳实践--设计优雅的key+合适的数据结构+持久化如何配置+慢查询问题解决)
80 1
|
6月前
|
存储 监控 NoSQL
【Redis技术专区】「优化案例」谈谈使用Redis慢查询日志以及Redis慢查询分析指南
【Redis技术专区】「优化案例」谈谈使用Redis慢查询日志以及Redis慢查询分析指南
161 0
|
缓存 NoSQL Redis
Redis慢查询
当我们在使用Redis时,有时候会遇到性能下降的情况,其中一个常见的问题是慢查询。慢查询是指执行时间超过一定阈值的Redis命令。Redis提供了一个慢查询日志功能,可以帮助我们定位和分析慢查询的原因。
|
运维 NoSQL Redis
【2023】Redis慢查询
【2023】Redis慢查询
151 0
|
NoSQL Redis 开发者
Redis 获取慢查询
有的时候,因为程序或者其他原因,需要知道哪些key 或者操作导致redis 慢查询。提供给开发者找出执行时间较长的 Redis 命令,并优化这些命令以提高 Redis 的性能。 以下是获取 Redis 慢查询的步骤:
112 0
|
存储 运维 NoSQL
一分钟快速搞懂Redis的慢查询分析
慢查询,顾名思义就是比较慢的查询,但是究竟是哪里慢呢?首先,我们了解一下Redis命令执行的整个过程:
2895 0
一分钟快速搞懂Redis的慢查询分析
|
NoSQL Java Redis
面试突击 004 | 如何排查 Redis 中的慢查询?视频实战篇
面试突击 004 | 如何排查 Redis 中的慢查询?视频实战篇
330 0
面试突击 004 | 如何排查 Redis 中的慢查询?视频实战篇
下一篇
无影云桌面