慢查询原因分析:

与mysql一样:当执行时间超过阀值,会将发生时间 耗时 命令记录

Redis学习 Redis性能测试及工具实战(七)_redis

redis命令生命周期:发送 排队 执行 返回

慢查询只统计第3个执行步骤的时间

预设阀值:两种方式,默认为10毫秒

  1. 动态设置6379:> config set slowlog-log-slower-than 10000  //10毫秒10000微秒

使用config set完后,若想将配置持久化保存到redis.conf,要执行config rewrite

     2,redis.conf修改:找到slowlog-log-slower-than 10000 ,修改保存即可

注意:slowlog-log-slower-than =0记录所有命令 -1命令都不记录

      原理:慢查询记录也是存在队列里的,slow-max-len 存放的记录最大条数,比如设置的slow-max-len=10,当有第11条慢查询命令插入时,队列的第一条命令就会出列,第11条入列到慢查询队列中, 可以config set动态设置,也可以修改redis.conf完成配置。

命令:

获取队列里慢查询的命令:slowlog get     查询返回的结构如下

Redis学习 Redis性能测试及工具实战(七)_redis_02

获取慢查询列表当前的长度:slowlog len  //以上只有1条慢查询,返回1

对慢查询列表清理(重置):slowlog reset //再查slowlog len 此时返回0 清空

对于线上slow-max-len配置的建议:线上可加大slow-max-len的值,记录慢查询存长命令时redis会做截断,不会占用大量内存,线上可设置1000以上

对于线上slowlog-log-slower-than配置的建议:默认为10毫秒,根据redis并发量来调整,对于高并发比建议为1毫秒

注意:1,慢查询只记录命令在redis的执行时间,不包括排队、网络传输时间

慢查询是先进先出的队列,访问日志记录出列丢失,需定期执行slow get,将结果存储到其它设备中(如mysql)

redis-cli详解

./redis-cli -r 3 -h 192.168.42.111 -a 12345678 ping //返回pong表示127.0.0.1:6379能通,r代表次数

./redis-cli -a 12345678 -r 100 -i 1 info |grep used_memory_human //每秒输出内存使用量,输100次,i代表执行的时间间隔

./redis-cli -p 6379  -h 192.168.42.111 -a 12345678

对于我们来说,这些常用指令以上可满足,但如果要了解更多

执行redis-cli --help, 可百度

redis-server详解

./redis-server ./redis.conf &  //指定配置文件启动

 ./redis-server --test-memory 1024 //检测操作系统能否提供1G内存给redis, 常用于测试,想快速占满机器内存做极端条件的测试,可使用这个指令

 redis上线前,做一次测试

redis-benchmark:基准性测试,测试redis的性能

edis-benchmark -h 192.168.42.111 -c 100 -n 10000  //100个客户端同时请求redis,共执行10000次

  会对各类数据结构的命令进行测试

Redis学习 Redis性能测试及工具实战(七)_mysql_03

测试命令事例:

1、redis-benchmark -h 192.168.42.111 -p 6379 -c 100 -n 100000

100个并发连接,100000个请求,检测host为localhost 端口为6379的redis服务器性能

2、redis-benchmark -h 192.168.42.111 -p 6379 -q -d 100  

测试存取大小为100字节的数据包的性能

3、redis-benchmark -h 192.168.42.111 -t set,lpush -n 100000 -q

只测试 set,lpush操作的性能,-q只显示每秒钟能处理多少请求数结果

4、redis-benchmark -h 192.168.42.111 -n 100000 -q script load "redis.call('set','foo','bar')"

只测试某些数值存取的性能, 比如说我在慢查询中发现,大部分为set语句比较慢,我们自己可以测一下Set是不是真的慢