一、Redis的慢日志

问题:如果有人反馈redis慢,如何进行排查?

系统资源情况
查看慢日志情况

1.查看慢日志的默认配置

>CONFIG GET slow*                     #查看慢日志的配置                  
1) "slowlog-max-len"
2) "128"                                      #最多记录128个
3) "slowlog-log-slower-than"
4) "10000"                                  #默认超过10毫秒就会记录

2.设置慢日志的时间是1毫秒,查询超过1毫秒就为慢日志

>config set slowlog-log-slower-than 1000     #设置慢日志的时间是1毫秒,查询超过1毫秒就为慢日志
> CONFIG GET slow*                                 #查看
1) "slowlog-max-len"
2) "128"
3) "slowlog-log-slower-than"
4) "1000"                                               #1毫秒为慢日志

3.使用Shell批量写入数据并获取,多写入些数据,方便我们查询数据大的时候产生慢日志
# for i in $(seq -w 100000);do redis-cli -a redispwd set name${i} test${i}; redis-cli -a redispwd get name${i}; done 2>/dev/null

4.产生慢日志

>KEYS *                        #查询一次,当操作时间大于1毫秒,就会产生一条慢日志
>KEYS * 
>KEYS * 
....可以多查询几次,多获取几条慢日志

5.查询慢日志

>SLOWLOG get               #默认获取最近10条
>SLOWLOG get 5            #获取5条
>SLOWLOG len               #慢日志量,查看慢日志的条数
>SLOWLOG reset             #清空慢日志

6.Slowlog各字段意思

127.0.0.1:6379> SLOWLOG get
1) 1) (integer) 115                   #慢日志的id,从0开始,第115个id
   2) (integer) 1668215297        #时间戳,慢日志产生的时间点,可以通过 date -d @1668215297   获取慢日志产生的时间
   3) (integer) 69284                 #慢日志运行的时间69毫秒
   4) 1) "keys"                          #产生慢日志的命令,一般是当数据量太多时候,运行keys *命令会比较慢
      2) "*"
   5) "127.0.0.1:60014"
   6) ""

二、Redis的key的有效期

给Redis的key设置有效期,-1表示永久,-2代表Redis回收了(key已经自动删除)
>set name test1            #默认设置的key是永久有效的
>get name
"test1"
>ttl name                      #查看key的状态,生命周期,-1表示永久有效
(integer) -1
>expire name 20           #方法1: 给key设置有效期,单位:秒,设置有效期是20s       

>set name2 test02 EX 20       #方法2: 再创建key时候直接给key设置有效期:20s