1、redis的命令执行流程
redis的慢查询只针对步骤3
默认情况下,慢查询的阈值是10ms
- 在配置文件中进行配置
//这个参数的单位为微秒
//如果将这个值设置为负数,则会禁用慢日志功能
//如果将其设置为0,则会强制记录每个命令
slowlog-log-slower-than 10000
- 超过指定时间的查询会记录到日志中
//表示在慢查询日志里可以记录的日志条数,当慢查询日志的数量已经达到该参数、新的慢查询日志到达时,就会把最老的一条日志删除
slowlog-max-len 128
2、慢查询实战
- 修改redis.conf配置文件
slowlog-log-slower-than 1
slowlog-max-len 100
如果没修改配置文件也可以用命令修改(二选一即可)
127.0.0.1:6379> config set slowlog-log-slower-than 1
OK
127.0.0.1:6379> config set slowlog-max-len 100
OK
127.0.0.1:6379> config rewrite #config rewrite意思是将上面两条配置写入配置文件
OK
- 启动redis服务器
[root@localhost redis-6.2.12]# redis-server redis.conf
[root@localhost redis-6.2.12]# ss -utpln | grep 6379
tcp LISTEN 0 511 127.0.0.1:6379 *:* users:(("redis-server",pid=1364,fd=6))
tcp LISTEN 0 511 [::1]:6379 [::]:* users:(("redis-server",pid=1364,fd=7))
- 配置好两个参数后,使用slowlog get命令观察慢查询
[root@localhost ~]# redis-cli
127.0.0.1:6379> set name003 beibei
OK
127.0.0.1:6379> get name003
"beibei"
127.0.0.1:6379> SLOWLOG get
1) 1) (integer) 22) (integer) 16873163943) (integer) 124) 1) "get"2) "name003"5) "127.0.0.1:47312"6) ""
2) 1) (integer) 12) (integer) 16873163893) (integer) 374) 1) "set"2) "name003"3) "beibei"5) "127.0.0.1:47312"6) ""
3) 1) (integer) 02) (integer) 16873162123) (integer) 14374) 1) "COMMAND"5) "127.0.0.1:47312"6) ""
解释:
1) 1) (integer) 22) (integer) 16873163943) (integer) 124) 1) "get"2) "name003"5) "127.0.0.1:47312"6) ""
1️⃣:一行是慢查询日志ID
2️⃣:二行是该命令运行的时间戳
3️⃣:三行是该命令的运行时长
4️⃣5️⃣:四五行是返回的命令及对应的参数
6️⃣:六行是执行该命令客户端地址
7️⃣:七行是客户端名称,没有即为空
注意:慢查询存在了slowlog的内存队列中,是链表结构
slowlog get #返回所有慢查询日志
slowlog get n #获取指定第n条慢查询的日志
slowlog len #获取慢查询日志的长度
slowlog reset #清空慢查询日志
3、慢查询原理&推荐方案
建议:
slowlog-max-len 1000 #生产环境建议配置在1000以上,否则你想看的记录可能别删除了
slowlog-log-slower-than 1 #单位是微秒,如果是高并发,高流量的系统的系统建议1毫秒
所谓的多线程,只是在IO的部分,内部执行命令还是单线程执行的,是串行的.