Redis的slowlog

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/suchenbin/article/details/102584289

slowlog的概念

slowlog指的是慢查询日志。redis的主线程是单线程的,会将所有命令按照请求时间的先后存放到队列中,当某一时刻接收到的命令足够多,来不及处理时,如果队列中某一条命令执行时间(相对来说)非常久,意味着redis主线程会阻塞一段时间,于是就会出现性能问题。redis会将执行时间超过某个值(默认为10ms)的命令记录下来,我们可以通过分析优化记录中的命令,达到提高redis的性能的效果。值得注意的是slowlog只保存在内存中,效率非常高,并不会影响到redis的性能。

slowlog相关配置

相关配置项:

slowlog-log-slower-than:执行时间的限制值,redis命令执行时间比这个值大,会被记录在slowlog中。值为负数,表示禁用;值为0,强制记录所有命令。单位是微秒。线上环境可以根据实际情况修改该值。

slowlog-max-len:被记录命令的个数,默认为128,其本身没有限制,但是因为slowlog保存在内存中,所以这个值越大,消耗内存越多。当命令个数超过这个值,又有新的命令被记录时,最先记录下的命令会被挤出slowlog(先进先出队列)。线上环境可以根据实际情况修改该值。

【Redis的配置文件】第1340行

修改配置方式

1)、动态配置,在redis服务启动后,可以临时修改配置,重启redis服务配置失效。

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

 如果你之前是使用./redis-server ../redis.conf  &启动redis服务,那么你可以使用config rewrite命令使其永久生效。

127.0.0.1:6379> config rewrite
14598:M 16 Oct 2019 15:25:15.086 # CONFIG REWRITE executed with success.
OK
127.0.0.1:6379> quit
[root@*** src]# ./redis-cli shutdown
14598:M 16 Oct 2019 15:26:26.528 # User requested shutdown...
14598:M 16 Oct 2019 15:26:26.528 * Saving the final RDB snapshot before exiting.
14598:M 16 Oct 2019 15:26:26.569 * DB saved on disk
14598:M 16 Oct 2019 15:26:26.569 * Removing the pid file.
14598:M 16 Oct 2019 15:26:26.569 # Redis is now ready to exit, bye bye...
[1]+  Done                    ./redis-server ../redis.conf
[root@*** src]# ./redis-server ../redis.conf  &
.
.
.
[root@*** src]# ./redis-cli
127.0.0.1:6379> config get slowlog-*
1) "slowlog-log-slower-than"
2) "8000"
3) "slowlog-max-len"
4) "120"

2)、修改redis.conf配置文件,使用vim redis.conf打开配置文件,/slowlog进行搜索定位,使用i进入编辑模式,Esc退出编辑模式,:wq保存退出,使用修改后配置文件重启redis服务即可。具体操作省略。

slowlog相关操作命令

1)、slowlog len,查看slowlog的记录总数

127.0.0.1:6379> slowlog len
(integer) 0

emmm...没有值,改下配置

127.0.0.1:6379> slowlog len
(integer) 0
127.0.0.1:6379> config set slowlog-log-slower-than 0
OK
127.0.0.1:6379> config get slowlog-log-slower-than
1) "slowlog-log-slower-than"
2) "0"
127.0.0.1:6379> set test su
OK
127.0.0.1:6379> 14929:M 16 Oct 2019 15:55:37.614 * 1 changes in 900 seconds. Saving...
                                                                                      14929:M 16 Oct 2019 15:55:37.615 * Background saving started by pid 16483
         16483:C 16 Oct 2019 15:55:37.662 * DB saved on disk
                                                            16483:C 16 Oct 2019 15:55:37.662 * RDB: 4 MB of memory used by copy-on-write
                                                                                                                                        14929:M 16 Oct 2019 15:55:37.718 * Background saving terminated with success
127.0.0.1:6379> 
127.0.0.1:6379> get test
"su"
127.0.0.1:6379> slowlog len
(integer) 4
127.0.0.1:6379> config set slowlog-log-slower-than 10000
OK
127.0.0.1:6379> slowlog len
(integer) 5

2)、slowlog get/slowlog get n,获取slowlog,加上n参数,表示获取n条slowlog。

127.0.0.1:6379> slowlog get
1) 1) (integer) 4
   2) (integer) 1571212578
   3) (integer) 1
   4) 1) "slowlog"
      2) "len"
   5) "127.0.0.1:56515"
   6) ""
2) 1) (integer) 3
   2) (integer) 1571212550
   3) (integer) 12
   4) 1) "get"
      2) "test"
   5) "127.0.0.1:56515"
   6) ""
3) 1) (integer) 2
   2) (integer) 1571212537
   3) (integer) 11
   4) 1) "set"
      2) "test"
      3) "su"
   5) "127.0.0.1:56515"
   6) ""
4) 1) (integer) 1
   2) (integer) 1571212512
   3) (integer) 14
   4) 1) "config"
      2) "get"
      3) "slowlog-log-slower-than"
   5) "127.0.0.1:56515"
   6) ""
5) 1) (integer) 0
   2) (integer) 1571212491
   3) (integer) 12
   4) 1) "config"
      2) "set"
      3) "slowlog-log-slower-than"
      4) "0"
   5) "127.0.0.1:56515"
   6) ""
127.0.0.1:6379> slowlog get 1
1) 1) (integer) 4
   2) (integer) 1571212578
   3) (integer) 1
   4) 1) "slowlog"
      2) "len"
   5) "127.0.0.1:56515"
   6) ""

3)、slowlog reset,清空slowlog

127.0.0.1:6379> slowlog reset
OK
127.0.0.1:6379> slowlog get
(empty list or set)

考虑到slowlog是先进先出的队列(定长),可以定时执行slowlog get获取slowlog,保存成文件或者存到数据库,进而分析优化它们,拿出来后也可以清空slowlog。

如果有写的不对的地方,请大家多多批评指正,非常感谢!

猜你喜欢

转载自blog.csdn.net/suchenbin/article/details/102584289